原生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 相关文章推荐
文本框输入时 实现自动提示(像百度、google一样)
Apr 05 Javascript
jQuery实现友好的轮播图片特效
Jan 12 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
Aug 13 Javascript
JavaScript 常见安全漏洞和自动化检测技术
Aug 21 Javascript
Javascript实现检测客户端类型代码封包
Dec 03 Javascript
完美实现八种js焦点轮播图(上篇)
Jul 18 Javascript
基于Bootstrap框架实现图片切换
Mar 10 Javascript
详解react如何在组件中获取路由参数
Jun 15 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
Jul 31 Javascript
JS使用Dijkstra算法求解最短路径
Jan 17 Javascript
JavaScript中继承原理与用法实例入门
May 09 Javascript
vue实现几秒后跳转新页面代码
Sep 09 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批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
php支持中文字符串分割的函数
2015/05/28 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
javascript之通用简单的table选项卡实现(二)
2010/05/09 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
NodeJs搭建本地服务器之使用手机访问的实例讲解
2018/05/12 NodeJs
vue脚手架搭建过程图解
2018/06/06 Javascript
js中时间格式化的几种方法
2018/07/22 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
Python AES加密模块用法分析
2017/05/22 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
python绘图模块之利用turtle画图
2021/02/12 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
中间件分为哪几类
2012/03/14 面试题
城管综合整治方案
2014/05/01 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
争做文明公民倡议书
2014/08/29 职场文书
环卫处个人工作总结
2015/03/04 职场文书
学雷锋感言
2015/08/03 职场文书