图解js图片轮播效果


Posted in Javascript onDecember 20, 2015

本文实例讲解了js图片轮播效果的实现原理,分享给大家供大家参考,具体内容如下

两种图片轮播实现方案,先来看效果对比:

方案一:

图解js图片轮播效果

原理:将图片摆成一行,从左到右依次滚动进入视野,当滚动到最后一张时,从右到左滚动回到第一张。这么做的缺点是,滚动到最后一张时,会有一个反向,导致整个滚动过程不连贯。

 方案二:

图解js图片轮播效果

实现原理示意图

 图解js图片轮播效果

原理:

1.轮播过程中,有几个关键元素:一个舞台(绿框)、候场区(黑框)、排队区(红框)和两个数组A和B。A用来保存正在展示和下一个将要展示的图片,如:图片1、2;B用来保存排队等候出场的图片,如图片5、4、3。

2.每一步轮播时,要做的事情如下:

A要做的事情是把它的第一个元素向左移走,把第二个元素向左移进展示区域;然后把刚才的第一个元素从A中shift出去,并splice进B的第一个位置上。

B要做的事情是把它的最后一个元素,移到候场区(即目前图2所在的位置)等候;然后把刚才的最后一个元素从B中pop出去,并push到A中。

Code:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>图片轮播-v2</title>
 <style>

 ul{
  margin: 0;
  padding: 0;
  list-style: none;

 }

 .sliderWrap{
  width: 200px;
  height: 112px;
  overflow: hidden;
  margin: 0 auto;
 }
 .sliderWrap ul{
  position: relative;
  width: 1000px;
  transition: left .5s ease;
  left: 0;
 }
 .sliderWrap li{
  position: relative;
  float: left;
 }
 .sliderWrap ul li img{
  width: 100%;
 }
 </style>
</head>
<body>
<div class="sliderWrap">
 <ul id="slider">
 <li><img src="images/slider/slider1.jpg" alt=""></li>
 <li><img src="images/slider/slider2.jpg" alt=""></li>
 <li><img src="images/slider/slider3.jpg" alt=""></li>
 <li><img src="images/slider/slider4.jpg" alt=""></li>
 </ul>
</div>
<input type="button" value="click me" id="next"/>
<script>
 /**
 * 图片轮播
 * @type {Element}
 */
 var btn = document.getElementById("next");
 var dom = document.getElementById("slider");
 var liArr = dom.getElementsByTagName("li");

 var curWidth = 200;
 var ulWidth = curWidth * liArr.length;
 var show = [];
 var circle = [];

 var goAway = "translate(-" + curWidth +"px, 0) translateZ(0px)";
 var goIn = "translate(0, 0) translateZ(0px)";
 var goPre = "translate(" + curWidth +"px, 0) translateZ(0px)";

 //保证所有li在ul中能在一行内放下
 dom.style.width = ulWidth + "px";

 for(var i = 0, len = liArr.length; i < len; i++){
 var curLi = liArr[i];

 curLi.setAttribute("data-index", i);
 curLi.style.width = curWidth + "px";

 if(i == 0){
  curLi.style.left = 0;
  show.push(curLi);
 }else{
  curLi.style.left = - curWidth * i + "px";
  if(i > 1){
  translate(curLi, goAway, '')
  circle.push(curLi);
  }else{
  show.push(curLi);
  translate(curLi, goPre, '');
  }
 }


 }

 circle.reverse();

 btn.onclick = function(){
 //已展示的图片滚粗
 var showFirst = show.shift();
 translate(showFirst, goAway, "300ms");

 //正在展示的图片
 translate(show[0], goIn, "300ms");
 circle.splice(0, 0, showFirst);

 //准备好下一个将要展示的图片
 var nextPre = circle.pop();
 translate(nextPre, goPre, "0ms");
 show.push(nextPre);

 };

 function translate(dom, goType, time){
 dom.style.transform =
  dom.style.webkitTransform =
   dom.style.mozTransform =
    dom.style.msTransform =
     dom.style.oTransform = goType;

 dom.style.transitionDuration =
  dom.style.webkitTransitionDuration =
   dom.style.mozTransitionDuration =
    dom.style.msTransitionDuration =
     dom.oTransitionDuration = time;


 }

</script>
</body>
</html>

精彩专题分享:jQuery图片轮播 JavaScript图片轮播 Bootstrap图片轮播

以上就是js图片轮播效果的实现原理以及详细代码,希望对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
List Installed Hot Fixes
Jun 12 Javascript
Javascript 遍历对象中的子对象
Jul 03 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
Apr 16 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
Mar 01 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
Jan 23 Javascript
简介JavaScript中的push()方法的使用
Jun 09 Javascript
js实现新年倒计时效果
Dec 10 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
Feb 17 Javascript
详解VueJS 数据驱动和依赖追踪分析
Jul 26 Javascript
使用Vue完成一个简单的todolist的方法
Dec 01 Javascript
利用ES6实现单例模式及其应用详解
Dec 09 Javascript
vue favicon设置以及动态修改favicon的方法
Dec 21 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
Dec 20 #Javascript
基于jquery实现页面滚动到底自动加载数据的功能
Dec 19 #Javascript
js点击按钮实现带遮罩层的弹出视频效果
Dec 19 #Javascript
js获取本机操作系统类型的两种方法
Dec 19 #Javascript
javascript精确统计网站访问量实例代码
Dec 19 #Javascript
js实现图片轮播效果
Dec 19 #Javascript
js实现图片上传并正常显示
Dec 19 #Javascript
You might like
php数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
解决vue v-for src 图片路径问题 404
2019/11/12 Javascript
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
pygame学习笔记(4):声音控制
2015/04/15 Python
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
Python中for循环控制语句用法实例
2015/06/02 Python
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
python遍历小写英文字母的方法
2019/01/02 Python
python 图片去噪的方法示例
2019/07/09 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
2020/02/18 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
PHP面试题集
2016/12/18 面试题
DataReader和DataSet的异同
2014/12/31 面试题
店铺转让协议书(2014版)
2014/09/23 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫