原生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插件
Sep 14 Javascript
JavaScript中:表达式和语句的区别[译]
Sep 17 Javascript
初识SmartJS - AOP三剑客
Jun 08 Javascript
js实现交通灯效果
Jan 13 Javascript
基于Vue.js实现tab滑块效果
Jul 23 Javascript
jquery实现限制textarea输入字数的方法
Sep 06 jQuery
基于原生js运动方式关键点的总结(推荐)
Oct 01 Javascript
vue实现随机验证码功能的实例代码
Apr 30 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
Jul 04 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
Dec 22 Javascript
详解vue组件之间的通信
Aug 30 Javascript
vue打开其他项目页面并传入数据详解
Nov 25 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
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
JavaScript中number转换成string介绍
2014/12/31 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
vue elementui form表单验证的实现
2018/11/11 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
JS常见内存泄漏及解决方案解析
2020/05/30 Javascript
Python max内置函数详细介绍
2016/11/17 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
Python中常用的内置方法
2019/01/28 Python
Python中字符串List按照长度排序
2019/07/01 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
Python用input输入列表的实例代码
2020/02/07 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
存储过程的优缺点是什么
2015/01/10 面试题
物流仓储实习自我鉴定
2013/09/25 职场文书
美德好少年主要事迹
2014/01/29 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
阳光体育活动总结
2014/04/30 职场文书
作风建设年活动总结
2014/08/27 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书
2016年班主任新年寄语
2015/08/18 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript