原生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重要知识点小结
Nov 06 Javascript
js实现广告漂浮效果的小例子
Jul 02 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
Sep 06 Javascript
正负小数点后两位浮点数实现原理及代码
Sep 06 Javascript
HTTP 304错误的详细讲解
Nov 13 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
May 19 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
Jun 09 Javascript
详解JavaScript ES6中的Generator
Jul 28 Javascript
Eclipse引入jquery报错如何解决
Dec 01 Javascript
Angular2搜索和重置按钮过场动画
May 24 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
Aug 22 Javascript
详解Typescript 内置的模块导入兼容方式
May 31 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
Terran热键控制
2020/03/14 星际争霸
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
PHP的Yii框架中View视图的使用进阶
2016/03/29 PHP
PHP并发多进程处理利器Gearman使用介绍
2016/05/16 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
javascript调试说明
2010/06/07 Javascript
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
div层的移动及性能优化
2010/11/16 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
JavaScript闭包详解
2015/02/02 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
清除输入框内的空格
2016/12/21 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
施工安全协议书
2013/12/11 职场文书
社区创先争优承诺书
2014/08/30 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
三方协议书
2015/01/27 职场文书
入党转正申请书范文
2019/05/20 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书