原生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.addClass始终无效原因分析
Sep 08 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
Oct 28 Javascript
获取中文字符串的实际长度代码
Jun 05 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
Oct 31 Javascript
js实现模拟计算器退格键删除文字效果的方法
May 07 Javascript
AngularJS基础 ng-repeat 指令简单示例
Aug 03 Javascript
关于JavaScript中事件绑定的方法总结
Oct 26 Javascript
微信小程序 Animation实现图片旋转动画示例
Aug 22 Javascript
vue添加axios,并且指定baseurl的方法
Sep 19 Javascript
使用JS location实现搜索框历史记录功能
Dec 23 Javascript
在Vue中使用Select选择器拼接label的操作
Oct 22 Javascript
js实现随机圆与矩形功能
Oct 29 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最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
基于php-fpm 参数的深入理解
2013/06/03 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
2015/07/01 PHP
php析构函数的简单使用说明
2015/08/24 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
2019/10/17 PHP
区分JS中的undefined,null,&quot;&quot;,0和false
2007/03/08 Javascript
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
vue的keep-alive用法技巧
2019/08/15 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
微信小程序实现点击生成随机验证码
2020/09/09 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
在Python的Django框架中创建语言文件
2015/07/27 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
简单了解python变量的作用域
2019/07/30 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
C++是不是类型安全的
2014/02/18 面试题
感恩老师演讲稿600字
2014/08/28 职场文书
慰问信模板
2015/02/14 职场文书
研究生论文答辩开场白
2015/05/27 职场文书
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server