原生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 相关文章推荐
Javascript计算两个marker之间的距离(Google Map V3)
Apr 26 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
Feb 22 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
May 28 Javascript
jquery+css3打造一款ajax分页插件(自写)
Jun 18 Javascript
js实现获取div坐标的方法
Nov 16 Javascript
JS实现页面跳转参数不丢失的方法
Nov 28 Javascript
JavaScript省市级联下拉菜单实例
Feb 14 Javascript
Vue制作Todo List网页
Apr 26 Javascript
详解a标签添加onclick事件的几种方式
Mar 29 Javascript
微信小程序实现上传多个文件 超过10个
Mar 30 Javascript
详解Vue的异步更新实现原理
Dec 22 Vue.js
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 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+Html+缓存
2006/11/25 PHP
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
HTML5的新特性(1)
2016/03/03 HTML / CSS
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
11月升旗仪式讲话稿
2014/02/15 职场文书
如何写求职信
2014/05/24 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
2014年国庆节寄语
2014/09/19 职场文书
护士2014年终工作总结
2014/11/11 职场文书
七一建党节慰问信
2015/02/14 职场文书
步步惊心观后感
2015/06/12 职场文书
公司员工宿舍管理制度
2015/08/07 职场文书
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript