图解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 相关文章推荐
javascript 面向对象编程 聊聊对象的事
Sep 17 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
Dec 31 Javascript
Node.js开发之访问Redis数据库教程
Jan 14 Javascript
JS动态添加Table的TR,TD实现方法
Jan 28 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
Aug 21 Javascript
AngularJS中的缓存使用
Jan 11 Javascript
使用layui 渲染table数据表格的实例代码
Aug 19 Javascript
jquery判断滚动条距离顶部的距离方法
Sep 05 jQuery
解决element ui select下拉框不回显数据问题的解决
Feb 20 Javascript
vue柱状进度条图像的完美实现方案
Aug 26 Javascript
详解Vue的ref特性的使用
Jan 24 Javascript
微信小程序学习之自定义滚动弹窗
Dec 20 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
mysql建立外键
2006/11/25 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
Vue框架之goods组件开发详解
2018/01/25 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
pycharm远程调试openstack的图文教程
2017/11/21 Python
python opencv之分水岭算法示例
2018/02/24 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
用python处理MS Word的实例讲解
2018/05/08 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
python和php哪个更适合写爬虫
2020/06/22 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
关于旷工的检讨书
2014/02/02 职场文书
师德建设实施方案
2014/03/21 职场文书
服务标语大全
2014/06/18 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
就业导师推荐信范文
2015/03/27 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技