图解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 相关文章推荐
检测是否已安装 .NET Framework 3.5的js脚本
Feb 14 Javascript
js截取字符串的两种方法及区别详解
Nov 05 Javascript
js给页面加style无效果的解决方法
Jan 20 Javascript
jQuery控制TR显示隐藏的几种方法
Jun 18 Javascript
JavaScript实现可拖拽的拖动层Div实例
Aug 05 Javascript
去除html代码里面的script正则方法
May 19 Javascript
Webpack如何引入bootstrap的方法
Jun 17 Javascript
jQuery.Ajax()的data参数类型详解
Jul 23 jQuery
React.js绑定this的5种方法(小结)
Jun 05 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
Sep 04 Javascript
Vue解析剪切板图片并实现发送功能
Feb 04 Javascript
如何通过JS实现转码与解码
Feb 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 和 MySQL 基础教程(一)
2006/10/09 PHP
php分页函数完整实例代码
2014/09/22 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
Extjs中常用表单介绍与应用
2010/06/07 Javascript
Script的加载方法小结
2011/01/12 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
js实现扫雷源代码
2020/11/27 Javascript
原生js 实现表单验证功能
2021/02/08 Javascript
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
pandas中Timestamp类用法详解
2017/12/11 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
Python os模块常用方法和属性总结
2020/02/20 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
浅析Python 序列化与反序列化
2020/08/05 Python
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
模具专业毕业生自荐书范文
2014/02/19 职场文书
家长对孩子的评语
2014/04/18 职场文书
中专生自荐信
2014/06/25 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
javascript对象3个属性特征
2021/11/17 Javascript