原生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代码格式化和语法着色V2
Oct 14 Javascript
Javascript控制页面链接在新窗口打开具体方法
Aug 16 Javascript
javascript控制台详解
Jun 25 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
Jul 27 Javascript
jquery ajax 如何向jsp提交表单数据
Aug 23 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
Dec 29 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
Mar 23 Javascript
使用gulp搭建本地服务器并实现模拟ajax
Apr 05 Javascript
vue-cli初始化项目中使用less的方法
Aug 09 Javascript
js核心基础之闭包的应用实例分析
May 11 Javascript
layui关闭层级、简单监听的实例
Sep 06 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
Nov 01 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
substr()函数中文版
2006/10/09 PHP
php记录日志的实现代码
2011/08/08 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
PHP 快速排序算法详解
2014/11/10 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
Prototype中dom对象方法汇总
2008/09/17 Javascript
javascript fullscreen全屏实现代码
2009/04/09 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
python中count函数知识点浅析
2020/12/17 Python
HTML5的革新 结构之美
2011/06/20 HTML / CSS
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
Liu Jo西班牙官网:意大利服装品牌
2019/09/11 全球购物
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
UNIX操作系统结构由哪几部分组成
2016/02/17 面试题
小学生自我鉴定
2013/10/12 职场文书
《植物妈妈有办法》教学反思
2014/02/25 职场文书
集中整治工作方案
2014/05/01 职场文书
机械专业求职信
2014/05/25 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
技术入股合作协议书
2014/10/07 职场文书
学生个人评语大全
2015/01/04 职场文书
英文投诉信格式
2015/07/03 职场文书