原生js实现无缝轮播图


Posted in Javascript onJanuary 11, 2020

本文实例为大家分享了js实现无缝轮播图的具体代码,供大家参考,具体内容如下

先上效果图

原生js实现无缝轮播图

原理图

原生js实现无缝轮播图

如图可见,是页面按顺序依次显示5张图片,包裹这五张图片的外层的盒子,我们叫ul,通过向左或右移动不同距离,实现在视图中显示的不同的图片,实现轮播,而同时下面的分页小球需要根据当前显示的内容进行点亮;

而无缝轮播图需要在第五张图片后面再加上第一张图片,这样通过右侧箭头,向右切换,当页面切换到第六张时,也就是最后一张图片,此时需要将ul的位置设置为第一张图的位置,然后从第一张图片滑动到第二张,形成一个无缝过渡;

同理,样通过左侧箭头,向左切换,已经显示到第一张图片时,再向左切换,ul会设置为到第五张图的位置,形成一个无缝过渡

html结构

<div class="wrapper">
 <div class="inner">
  <ul>
   <li>页面1</li>
   <li>页面2</li>
   <li>页面3</li>
   <li>页面4</li>
   <li>页面5</li>
   <li>页面1</li>
  </ul>
  <div class="circle">
   <span class="current">1</span>
   <span>2</span>
   <span>3</span>
   <span>4</span>
   <span>5</span>
  </div>
  <div class="direction">
   <span class="left"><</span>
   <span class="right">></span>
  </div>
 </div>
</div>

js代码

//获取页面元素
 var ul = document.getElementsByTagName("ul")[0];
 var inner = document.getElementsByClassName("inner")[0];
 var circle = document.getElementsByClassName("circle")[0];
 var spanArr = circle.children;
 var direction =document.getElementsByClassName("direction")[0];
 var dirChid=direction.children;
 var innerWidth = inner.offsetWidth;
 //两个定时器(一个记录图片,一个记录小圆球)
 var dindex = 0;
 var span = 0;
 //var ulNewLi = ul.children[0].cloneNode(true);
 // ul.appendChild(ulNewLi);
 for(var i = 0;i<spanArr.length;i++){
  //给每个span绑定index,为了和ul中的页面联动
  spanArr[i].index = i;
  spanArr[i].onmouseover = function () {
   //点击分页小球,添加current类,current类定义了小球的背景颜色
   for (var j = 0; j<spanArr.length ;j++) {
    spanArr[j].className = "";
   }
   this.className = "current";
   dindex = span = this.index;
   //调用缓动函数,传入参数:移动元素,目标距离
   animation(ul,-this.index*innerWidth);
  }
 }
 //为左箭头绑定事件
 //dindex 记录图片的索引,span记录小球的索引,图片个数为6,小球的个数为5
 dirChid[0].οnclick=function (event) {
  //每次点击左切换,图片的索引减一,小球的索引减一
  dindex--;
  //图片的索引<0时,设置ul的位置为第五个图片的位置
  if(dindex<0){
   ul.style.left= -innerWidth*spanArr.length+"px";
   dindex= spanArr.length-1;
  }
  animation(ul,-dindex*innerWidth);
  //小球的索引减一
  span--;
  //当小球索引小于0时,设置它的索引为4
  if(span<0){
   span= spanArr.length-1;
  }
  //点亮小球
  for(var i= 0 ; i<spanArr.length;i++){
   spanArr[i].className = "";
  }
  spanArr[span].className = "current";
 
 }
 //为右箭头绑定事件,
 dirChid[1].οnclick=function () {
  dindex++;
  //图片的索引大于小球长度个数时,设置ul的位置为第1张图片的位置
  if(dindex>spanArr.length){
   ul.style.left=0;
   dindex=1;
  }
  animation(ul,-dindex*innerWidth);
  span++;
  if(span>spanArr.length-1){
   span= 0;
  }
  for(var k= 0 ; k<spanArr.length;k++){
   spanArr[k].className = "";
  }
  spanArr[span].className = "current";
 
 }
 
 //封装缓动动画函数
 function animation(ele,target) {
  clearInterval(ele.timer);
  ele.timer=setInterval(function () {
   //获取起使位置
   leader= ele.offsetLeft;
   //获取缓动动画步长
   var step = (target-leader)/10;
   //支持不同方向的移动,所以步长有正有负
   step = step >0? Math.ceil(step):Math.floor(step);
   //当前位置= 盒子的位置+步长
   leader = leader +step;
   ele.style.left = leader+"px";
   if(ele.offsetLeft === target) {
    clearInterval(ele.timer);
   }
  },30)
 
}

精彩专题分享:jQuery图片轮播 JavaScript图片轮播 Bootstrap图片轮播

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS应用之禁止抓屏、复制、打印
Feb 21 Javascript
javascript String 对象
Apr 25 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
Jul 17 Javascript
avascript中的自执行匿名函数应用示例
Sep 15 Javascript
JavaScript获得表单target属性的方法
Apr 02 Javascript
Jquery中巧用Ajax的beforeSend方法
Jan 20 Javascript
使用Angular.js实现简单的购物车功能
Nov 21 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
Jan 04 Javascript
js获取json中key所对应的value值的简单方法
Jun 17 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
Aug 18 Javascript
JavaScript创建对象的七种方式全面总结
Aug 21 Javascript
解决vue请求接口第一次成功,第二次失败问题
Sep 08 Javascript
JS实现轮播图效果
Jan 11 #Javascript
js实现带搜索功能的下拉框
Jan 11 #Javascript
js实现select下拉框选择
Jan 11 #Javascript
js实现二级联动简单实例
Jan 11 #Javascript
jQuery实现轮播图效果demo
Jan 11 #jQuery
详解微信小程序中var、let、const用法与区别
Jan 11 #Javascript
jQuery擦除插件eraser使用方法详解
Jan 11 #jQuery
You might like
可以在线执行PHP代码包装修正版
2008/03/15 PHP
php 引用(&amp;)详解
2009/11/20 PHP
php stripslashes和addslashes的区别
2014/02/03 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
javascript String 对象
2008/04/25 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
2020/01/07 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
在Python中使用__slots__方法的详细教程
2015/04/28 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
python 实现登录网页的操作方法
2018/05/11 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
python实现定时发送邮件
2020/12/23 Python
super关键字的用法
2012/04/10 面试题
linux面试题参考答案(7)
2014/07/24 面试题
开业庆典邀请函
2014/01/08 职场文书
《老山界》教学反思
2014/04/08 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
2014年仓库工作总结
2014/11/20 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技