图解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 相关文章推荐
js获取TreeView控件选中节点的Text和Value值的方法
Nov 24 Javascript
ECMAScript中函数function类型
Jun 03 Javascript
JS实现黑色大气的二级导航菜单效果
Sep 18 Javascript
Three.js基础部分学习
Jan 08 Javascript
微信小程序实战之自定义抽屉菜单(7)
Apr 18 Javascript
详解Vue用axios发送post请求自动set cookie
May 10 Javascript
在小程序中使用Echart图表的示例代码
Aug 02 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
May 06 Javascript
Vue 子组件与数据传递问题及注意事项
Jul 11 Javascript
微信小程序之 catalog 切换实现解析
Sep 12 Javascript
vue-路由精讲 二级路由和三级路由的作用
Aug 06 Javascript
js+cavans实现图片滑块验证
Sep 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
PHP.MVC的模板标签系统(五)
2006/09/05 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
js动态设置div的值下例子
2013/10/29 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
[03:54]DOTA2英雄梦之声_第06期_昆卡
2014/06/23 DOTA
[01:00:25]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS Liquid
2018/03/31 DOTA
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python复制目录结构脚本代码分享
2015/03/06 Python
详解python中requirements.txt的一切
2017/03/03 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
python pandas 如何替换某列的一个值
2018/06/09 Python
Python异常处理例题整理
2019/07/07 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
css3实现可滑动跳转的分页插件示例
2014/05/08 HTML / CSS
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
代收款委托书范本
2014/10/01 职场文书
2015年度女工工作总结
2015/10/22 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
JavaScript 对象创建的3种方法
2021/11/17 Javascript
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
2022/04/12 PostgreSQL
python blinker 信号库
2022/05/04 Python
Golang Web 框架Iris安装部署
2022/08/14 Python