原生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 相关文章推荐
用document.documentElement取代document.body的原因分析
Nov 12 Javascript
js中关于new Object时传参的一些细节分析
Mar 13 Javascript
jquery validate 自定义验证方法介绍 日期验证
Feb 27 Javascript
JavaScript更改字符串的大小写
May 07 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
Aug 24 Javascript
基于JS代码实现实时显示系统时间
Jun 16 Javascript
jQuery插件DataTables分页开发心得体会
Aug 22 jQuery
JS动态添加的div点击跳转到另一页面实现代码
Sep 30 Javascript
Vue组件开发之LeanCloud带图形校验码的短信发送功能
Nov 07 Javascript
jQuery 实现左右两侧菜单添加、移除功能
Jan 02 jQuery
JavaScript插入排序算法原理与实现方法示例
Aug 06 Javascript
详解vue2.0 资源文件assets和static的区别
Nov 27 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的String类代码
2010/04/20 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
javascript 树控件 比较好用
2009/06/11 Javascript
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
探究JavaScript函数式编程的乐趣
2015/12/14 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
Python获取apk文件URL地址实例
2013/11/01 Python
Python AES加密实例解析
2018/01/18 Python
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
Python变量类型知识点总结
2019/02/18 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
深入了解Python 变量作用域
2020/07/24 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
J2EE模式面试题
2016/10/11 面试题
财经学院自荐信范文
2014/02/02 职场文书
我的祖国演讲稿
2014/05/04 职场文书
电子商务专业自荐信
2014/06/02 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android
Python OpenCV之常用滤波器使用详解
2022/04/07 Python