图解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 相关文章推荐
JQUERY复选框CHECKBOX全选,取消全选
Aug 30 Javascript
js关于精确计算和数值格式化以及直接引js文件
Jan 28 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
Nov 18 Javascript
jquery购物车结算功能实现方法
Oct 29 Javascript
前端 Vue.js 和 MVVM 详细介绍
Dec 29 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
Jul 31 Javascript
Angular表格神器ui-grid应用详解
Sep 29 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
Sep 10 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
Nov 05 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
Dec 01 Javascript
keep-alive不能缓存多层级路由菜单问题解决
Mar 10 Javascript
Element中Slider滑块的具体使用
Jul 29 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
日本十大惊悚动漫
2020/03/04 日漫
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
JavaScript入门学习书籍推荐
2008/06/12 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
2014/12/10 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
2016/10/24 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
Angularjs cookie 操作实例详解
2017/09/27 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
python实现下载整个ftp目录的方法
2017/01/17 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
Python列表与元组的异同详解
2019/07/02 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
解决TensorFlow训练模型及保存数量限制的问题
2021/03/03 Python
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
英国床垫在线:Mattress Online
2016/12/07 全球购物
英国香水店:The Perfume Shop
2017/03/27 全球购物
国际商务系学生个人的自我评价
2013/11/26 职场文书
商业活动邀请函
2014/02/04 职场文书
大学生新学期计划书
2014/04/28 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
申论倡议书范文
2014/05/13 职场文书
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python