图解js图片轮播效果

 更新时间:2015年12月20日 08:57:35   作者:anywing  
这篇文章主要以图片展示的方式向大家讲解了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程序设计有所帮助。

相关文章

  • webpack中CommonsChunkPlugin详细教程(小结)

    webpack中CommonsChunkPlugin详细教程(小结)

    本篇文章主要介绍了webpack中CommonsChunkPlugin详细教程(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 禁止JS运行的代码

    禁止JS运行的代码

    如果我们要让页面上的javascript不运行,方法最简单的就是使用noscript标签,经常被用来屏蔽那些免费空间要加上的JS。
    2011-01-01
  • 关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法

    关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法

    客户端是UTF-8编码,这也是现在大家公认的标准编码在这种情况下,实用AJAX异步获取GB2312编码的服务器端信息时,不可避免的要遇到汉字乱码问题
    2010-11-11
  • Vue elementUI实现免密登陆与号码绑定功能

    Vue elementUI实现免密登陆与号码绑定功能

    这篇文章主要介绍了Vue elementUI实现免密登陆与号码绑定功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • javascript+css 网页每次加载不同样式的实现方法

    javascript+css 网页每次加载不同样式的实现方法

    用户每次访问时随机载入样式,让微博在视觉上保持新鲜感。虽然思路与实现都比较简单,但还是想记录下来,与大家分享。
    2009-12-12
  • JavaScript闭包原理与用法实例分析

    JavaScript闭包原理与用法实例分析

    这篇文章主要介绍了JavaScript闭包原理与用法,结合实例形式分析了javascript闭包的概念、功能、常见问题及相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • antd Upload 文件上传的示例代码

    antd Upload 文件上传的示例代码

    这篇文章主要介绍了antd Upload 文件上传的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • webpack 代码分离优化快速指北

    webpack 代码分离优化快速指北

    这篇文章主要介绍了webpack 代码分离优化快速指北,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • JavaScript实现封闭区域布尔运算的示例代码

    JavaScript实现封闭区域布尔运算的示例代码

    这篇文章主要介绍了JavaScript实现封闭区域布尔运算的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • npm install jquery报错问题解决

    npm install jquery报错问题解决

    这篇文章主要为大家介绍了npm install jquery报错问题解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10

最新评论