原生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的with语句使用方法
Sep 21 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
Dec 19 Javascript
基于jquery的图片幻灯展示源码
Jul 15 Javascript
详解JavaScript函数绑定
Aug 18 Javascript
javascript获取form里的表单元素的示例代码
Feb 14 Javascript
JavaScript获取网页表单action属性的方法
Apr 02 Javascript
jquery获取input type=text中的值的各种方式(总结)
Dec 02 Javascript
jQuery元素选择器实例代码
Feb 06 Javascript
解析Vue2.0双向绑定实现原理
Feb 23 Javascript
使用node.js搭建服务器
May 20 Javascript
layer.open关闭父窗口 以及调用父页面的方法
Aug 17 Javascript
浅谈Express.js解析Post数据类型的正确姿势
May 30 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断点续传之如何分割合并文件
2014/03/22 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
jQuery循环遍历子节点并获取值的方法
2016/04/14 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
Python实现多线程抓取妹子图
2015/08/08 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
import的本质解析
2017/10/30 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
基于Python pyecharts实现多种图例代码解析
2020/08/10 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
户外活动策划方案
2014/03/12 职场文书
房产代理公证处委托书
2014/04/04 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
质量主管工作职责
2014/09/26 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
储备店长岗位职责
2015/04/14 职场文书
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电