【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操作cookie_获取与修改代码
May 21 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
Apr 07 Javascript
Javascript玩转继承(二)
May 08 Javascript
js仿小米官网图片轮播特效
Sep 29 Javascript
js 实现一些跨浏览器的事件方法详解及实例
Oct 27 Javascript
JS封装通过className获取元素的函数示例
Dec 20 Javascript
基于Bootstrap框架实现图片切换
Mar 10 Javascript
Vue axios 中提交表单数据(含上传文件)
Jul 06 Javascript
微信小程序 页面跳转传值实现代码
Jul 27 Javascript
vue init失败简单解决方法(终极版)
Dec 22 Javascript
spirngmvc js传递复杂json参数到controller的实例
Mar 29 Javascript
Express之托管静态文件的方法
Jun 01 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
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
[原创]php实现子字符串位置相互对调互换的方法
2016/06/02 PHP
详解EventDispatcher事件分发组件
2016/12/25 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
jQuery select控制插件
2009/08/17 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
2017/12/11 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
JS pushlet XMLAdapter适配器用法案例解析
2020/10/16 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
Python3 log10()函数简单用法
2019/02/19 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
茶叶店创业计划书范文
2014/01/19 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
建党伟业电影观后感
2015/06/01 职场文书
创业计划书之家教中心
2019/09/25 职场文书
PyMongo 查询数据的实现
2021/06/28 Python
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL