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


Posted in Javascript onMarch 17, 2016

一、前期准备

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】实现带预览图幻灯片效果的示例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 打印页面代码
Mar 24 Javascript
node.js中的fs.lchmodSync方法使用说明
Dec 16 Javascript
jquery实现简单实用的打分程序实例
Jul 23 Javascript
深入浅析JavaScript中的constructor
Apr 19 Javascript
浅谈jQuery 选择器和dom操作
Jun 07 Javascript
全面解析Bootstrap表单样式的使用
Sep 09 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
Nov 16 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
Dec 25 Javascript
JS异步宏队列微队列原理详解
Sep 09 Javascript
JavaScript实现缓动动画
Nov 25 Javascript
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
JavaScript中isPrototypeOf函数
Nov 07 Javascript
javascript 继承学习心得总结
Mar 17 #Javascript
Node.js实用代码段之正确拼接Buffer
Mar 17 #Javascript
Node.js实用代码段之获取Buffer对象字节长度
Mar 17 #Javascript
jquery基础知识第一讲之认识jquery
Mar 17 #Javascript
Angularjs 滚动加载更多数据
Mar 17 #Javascript
基于jquery实现智能提示控件intellSeach.js
Mar 17 #Javascript
JavaScript函数内部属性和函数方法实例详解
Mar 17 #Javascript
You might like
php session处理的定制
2009/03/16 PHP
调试php程序的简单步骤
2019/10/04 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
JS支持带x身份证号码验证函数
2008/08/10 Javascript
JQuery CSS样式控制 学习笔记
2009/07/23 Javascript
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
javascript回车完美实现tab切换功能
2014/03/13 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
2020/07/28 Javascript
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
Python爬取网页信息的示例
2020/09/24 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
举例说明类变量和实例变量的区别
2016/06/30 面试题
绿化先进工作者事迹材料
2014/01/30 职场文书
高中军训感言800字
2014/03/05 职场文书
街道务虚会发言材料
2014/10/20 职场文书
乡镇防汛工作汇报
2014/10/28 职场文书
如何写通讯稿
2015/07/22 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis