原生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 相关文章推荐
jquery中show()、hide()和toggle()用法实例
Jan 15 Javascript
js实现的后台左侧管理菜单代码
Sep 11 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
Dec 10 Javascript
AngualrJS中的Directive制作一个菜单
Jan 26 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
Feb 02 Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 Javascript
详解vue后台系统登录态管理
Apr 02 Javascript
Async/Await替代Promise的6个理由
Jun 15 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
Feb 03 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
Mar 03 Javascript
vscode中Vue别名路径提示的实现
Jul 31 Javascript
Vue实现圆环进度条的示例
Feb 06 Vue.js
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
MVC模式的PHP实现
2006/10/09 PHP
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
如何使用php输出时间格式
2013/08/31 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
JavaScript 中的replace方法说明
2007/04/13 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
JS获得图片alt信息的方法
2015/04/01 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
react路由配置方式详解
2017/08/07 Javascript
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
微信小程序实现自动定位功能
2018/10/31 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
Python中logging日志库实例详解
2020/02/19 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
深圳-东方伟业笔试部分
2015/02/11 面试题
后勤主管工作职责
2013/12/07 职场文书
成绩单家长评语大全
2014/04/16 职场文书
写字楼租赁意向书
2014/07/30 职场文书
购房委托书范本
2014/09/18 职场文书
2019年入党思想汇报
2019/03/25 职场文书
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis
Python基于百度AI实现抓取表情包
2021/06/27 Python