图解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的3d效果实现代码
Mar 23 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
Oct 15 Javascript
js 窗口抖动示例
Sep 04 Javascript
Jquery中扩展方法extend使用技巧
Aug 24 Javascript
jQuery检测鼠标左键和右键点击的方法
Mar 17 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
Jun 13 Javascript
jQuery实现的瀑布流加载效果示例
Sep 13 Javascript
浅析BootStrap中Modal(模态框)使用心得
Dec 24 Javascript
vue使用高德地图根据坐标定位点的实现代码
Aug 22 Javascript
十分钟教你上手ES2020新特性
Feb 12 Javascript
javascript实现智能手环时间显示
Sep 18 Javascript
用javascript制作qq注册动态页面
Apr 14 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注入点构造代码
2008/06/14 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
javascript基本语法分析说明
2008/06/15 Javascript
JS支持带x身份证号码验证函数
2008/08/10 Javascript
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
JS定时关闭窗口的实例
2013/05/22 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
Python函数返回不定数量的值方法
2019/01/22 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
教师个人的自我评价分享
2014/01/02 职场文书
三八妇女节活动总结
2014/05/04 职场文书
检讨书格式
2015/05/07 职场文书
2016公司新年问候语
2015/11/11 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
Python Parser的用法
2021/05/12 Python
解决Pytorch中关于model.eval的问题
2021/05/22 Python
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js