原生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 相关文章推荐
用ADODB.Stream转换
Jan 22 Javascript
javascript 学习之旅 (1)
Feb 05 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
Apr 20 Javascript
confirm的用法示例用于按钮操作时确定是否执行
Jun 19 Javascript
JavaScript中的pow()方法使用详解
Jun 15 Javascript
jQuery Validate初步体验(一)
Dec 12 Javascript
Javascript类型转换的规则实例解析
Feb 23 Javascript
瀑布流的实现方式(原生js+jquery+css3)
Jun 28 Javascript
JS中实现函数return多个返回值的实例
Feb 21 Javascript
浅谈vue后台管理系统权限控制思考与实践
Dec 19 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
May 06 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
May 13 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操作MongoDB时的整数问题及对策说明
2011/05/02 PHP
兼容PHP和Java的des加密解密代码分享
2014/06/26 PHP
PHP设置进度条的方法
2015/07/08 PHP
必须收藏的23个php实用代码片段
2016/02/02 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
浅谈PHP的反射API
2017/02/26 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
给Function做的OOP扩展
2009/05/07 Javascript
js 判断文件类型并控制表单提交示例代码
2013/11/14 Javascript
一个实用的图片切换支持点击切换和自动轮播
2014/09/09 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
2016/05/13 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
python主线程捕获子线程的方法
2018/06/17 Python
python实现人民币大写转换
2018/06/20 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
pandas中ix的使用详细讲解
2020/03/09 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
活动策划邀请函
2014/02/06 职场文书
安全在我心中演讲稿
2014/09/01 职场文书