【JS+CSS3】实现带预览图幻灯片效果的示例代码

作者:jingxian 时间:2024-04-10 13:55:15 

一、前期准备

1.1 案例分析

适用场景:单例布局
1.2 方 *

V视图 HTML+CSS+调试
C js实现控制流程
D数据 优化扩展

二、代码

结构


<div class="slider"><!-- 特效区 -->
 <div class="main"><!-- 主视图区 -->
   <div class="main_i">
     <div class="caption">
       <h2>h2 caption</h2>
       <h2>h3 caption</h2>
     </div>
   <img src="images/{{index}}.jpg" alt="">
   </div>
 </div><!-- 主视图区结束 -->
 <div class="ctrl"><!-- 控制区 -->
   <a href="javascript:;"><img src="images/{{index}}.jpg" alt="">
   </a>
 </div><!-- 控制区结束 -->
</div><!-- 特效区结束 -->

样式(CSS略)

脚本功能开发

>>内容输出
Template改造 输出幻灯片&控制按钮 图片位置调整

>>切换控制
切换幻灯片 .main_i_active 切换控制按钮 .ctrl_i_active


0、修改VIEW ->Template(关键字替换),增加Template id
图片区
<div class="main" id="template_main">
<h2>{{h2}}}</h2>
<h3>{{h3}}}</h3>
<img src="images/{{index}}.jpg">
按钮区
<div class="ctrl" id="template_ctrl">
<a class="ctrl_i" id="ctrl_{{index}}" href="javascript:switchSlider({{index}});"><img src="images/{{index}}.jpg" alt="图片预览"></a>


下面是重点 JS脚本的编写~~


<script type="text/javascript">

// 1、数据定义(实际生产环境,应由后台给出)
 var data = [
   {img:1,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
   {img:2,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
   {img:3,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
   {img:4,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
   {img:5,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
   {img:6,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
   {img:7,h2:"我是标题二,小标题",h3:"我是标题三,大标题"},
 ];

// 2、通用函数
 var g = function(id){
   if( id.substr(0,1) =="." ){
     return document.getElementsByClassName( id.substr(1) );
   }
   return document.getElementById(id);
 }

// 3、添加幻灯片的操作(所有幻灯片&对应的按钮)
 function addSliders(){
   // 3.1 获取模版
   var tpl_main = g("template_main").innerHTML
     .replace(/^\s*/,'')
     .replace(/\s*$/,'');

var tpl_ctrl = g("template_ctrl").innerHTML
     .replace(/^\s*/,'')
     .replace(/\s*$/,'');

// 3.2 定义最终输出HTML的变量
   var out_main = [];
   var out_ctrl = [];

// 3.3 遍历所有数据,构建最终输出的HTML
   for( i in data ){
     var _html_main = tpl_main
       .replace(/{{index}}/g,data[i].img)
       .replace(/{{h2}}/g,data[i].h2)
       .replace(/{{h3}}/g,data[i].h3)
       .replace(/{{css}}/g,['','main_i_right'][i%2]);

var _html_ctrl = tpl_ctrl
       .replace(/{{index}}/g,data[i].img);

out_main.push(_html_main);
     out_ctrl.push(_html_ctrl);
   }

// 3.4 把HTML回写到对应的DOM里面
   g("template_main").innerHTML = out_main.join('');
   g("template_ctrl").innerHTML = out_ctrl.join('');

// 7、增加#main_background
   g('template_main').innerHTML += tpl_main
     .replace(/{{index}}/g,'{{index}}')
     .replace(/{{h2}}/g,data[i].h2)
     .replace(/{{h3}}/g,data[i].h3);

g('main_{{index}}').id = 'main_background';
 }

// 5、幻灯片切换
 function switchSliders(n){
   // 5.1 获得要展现的幻灯片&控制按钮 DOM
   var main = g("main_"+n);
   var ctrl = g("ctrl_"+n);

// 5.2 获得所有的幻灯片&控制按钮
   var clear_main = g('.main_i');
   var clear_ctrl = g('.ctrl_i');

// 5.3 清除他们的active样式
   for(var i=0;i<clear_ctrl.length;i++){
     clear_main[i].className = clear_main[i].className.replace('main_i_active','');
     clear_ctrl[i].className = clear_ctrl[i].className.replace('ctrl_i_active','');
   }

// 5.4为当前控制按钮和幻灯片附加样式  
   g("main_"+n).className += ' main_i_active';
   g("ctrl_"+n).className += ' ctrl_i_active';
   // 7.2切换时 复制上一张幻灯片到main_background中
   setTimeout(function(){
     g('main_background').innerHTML = main.innerHTML;
   },1000);

}

// 6、动态调整图片的margin-top 使其垂直居中
 function movePictures(){
   var pictures = g('.picture');
   for(i=0;i<pictures.length;i++){
     pictures[i].style.marginTop = -(pictures[i].clientHeight/3) + 'px';
   }
 }

// 4、定义何时处理幻灯片输出
 window.onload = function(){
   addSliders();
   switchSliders(1);
   setTimeout(function(){
     movePictures();
   },100)
 }
</script>

效果图 … = =莫吐槽又是这几张图~~~ 

【JS+CSS3】实现带预览图幻灯片效果的示例代码 

遇到问题:

1、 给图片直接加top:50%;会有BUG,没作用,原因可能是没给height固定高度~~给了固定高度就好了

但问题又来了,2、给固定高度后,按钮组不能自适应宽度 … 会被挤到第二排去  ……

标签:JS,CSS3,预览图,幻灯片
0
投稿

猜你喜欢

  • 热门问题python爬虫的效率如何提高

    2023-06-11 03:21:40
  • TensorFlow神经网络学习之张量与变量概念

    2023-07-06 20:58:02
  • python 函数内部修改外部变量的方法

    2022-05-24 09:04:19
  • ASP教程:制作登陆验证页面程序

    2008-10-23 15:00:00
  • Python Panda中索引和选择 series 的数据

    2023-05-03 10:02:56
  • ASP.NET Core Authentication认证实现方法

    2023-07-21 12:21:31
  • Django模板继承与模板的导入实例详解

    2023-04-03 14:41:28
  • 微信小程序indexOf的替换方法(推荐)

    2024-04-16 09:51:11
  • Mysql Explain 详解

    2010-12-03 16:09:00
  • 在TABLE中模仿excel的单元格移动

    2007-12-22 12:03:00
  • TensorFlow平台下Python实现神经网络

    2023-10-11 22:31:31
  • golang 格式化输入输出操作

    2024-04-25 15:10:24
  • python+OpenCV实现图像拼接

    2023-01-28 08:09:26
  • 浅谈SQL Server中的三种物理连接操作(性能比较)

    2024-01-25 22:11:56
  • golang goquery selector选择器使用示例大全

    2023-10-14 15:40:58
  • python3.7简单的爬虫实例详解

    2023-06-30 15:55:13
  • Python采集某度贴吧排行榜实战示例

    2022-03-08 21:07:17
  • Python3 搭建Qt5 环境的方法示例

    2022-08-17 05:12:34
  • Oracle中返回结果集的存储过程分享

    2012-07-11 15:50:16
  • MySQL数据库本地备份和双机相互备份

    2008-05-27 12:25:00
  • asp之家 网络编程 m.aspxhome.com