原生JS实现无缝轮播图片


Posted in Javascript onJune 24, 2020

本文实例为大家分享了JS实现无缝轮播图的具体代码,供大家参考,具体内容如下

运动插件

function animove(obj,distance,speed,callback) { //调用的变量 目标距离 速度 回调函数
 clearInterval(obj.timer);
 obj.timer = setInterval(function () {
  let step = (distance - obj.offsetLeft) / 10;
  step = step > 0 ? Math.ceil(step) : Math.floor(step);
  if (obj.offsetLeft == distance) {
  clearInterval(obj.timer);
  if (callback) {
   callback();
  }
  }
  obj.style.left = obj.offsetLeft + step + 'px';
 },speed)
}

CSS代码

* {
  margin: 0;
  padding: 0;
 }
 ul,li {
  list-style: none;
 }
 .box {
  width: 1226px;
  height: 460px;
  margin: 100px auto;
  position: relative;
  overflow: hidden;
 }
 .pic-box {
  width: 4904px;
  position: absolute;
 }
 .pic-box > li {
  float: left;
 }
 .point {
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
 }
 .point > li {
  float: left;
  width: 8px;
  height: 8px;
  border: 1px solid blueviolet;
  margin: 0 4px;
  border-radius: 50%;
 }
 .point > .active {
  background-color: orange;
 }
 .left-btn,
 .right-btn {
  width: 50px;
  height: 40px;
  background-color: rgba(0,0,0,.5);
  text-align: center;
  line-height: 40px;
  font-size: 20px;
  color: white;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
 }
 .left-btn {
  left: 0;
 }
 .right-btn {
  right: 0;
 }

HTML代码

<div class="box">
 <ul class="pic-box">
  <li>
  <img src="lb.webp" alt="">
  </li>
  <li>
  <img src="lb2.webp" alt="">
  </li>
  <li>
  <img src="pic3.jpg" alt="">
  </li>
 </ul>
 <ul class="point">
 </ul>
 <div class="left-btn"><</div>
 <div class="right-btn">></div>
 </div>
<script src="运动插件.js"></script>

js代码

let picbox = document.querySelector('.pic-box');
 let pic = document.querySelectorAll('.pic-box > li'); //由于获取的不是动态的 所以之后的克隆 并不会使这个变量发生改变
 let point = document.querySelector('.point');
 let leftbtn = document.querySelector('.left-btn');
 let rightbtn = document.querySelector('.right-btn');
 let carouselindex = 0;
 //通过for循环 生成小圆点 并将圆点添加到ul里
 for (let i = 0; i < pic.length; i ++) {
  let pointli = document.createElement('li');
  pointli.classList.add(i);
  point.appendChild(pointli);
 }
 //给第一个小圆点默认添加active
 point.children[0].classList.add('active');

 //克隆第一个图片 深度
 let kelon = picbox.children[0].cloneNode(true);
 picbox.appendChild(kelon); //将图片添加到最后位置

 //获取所以圆点
 let pointli = document.getElementsByClassName('point')[0].getElementsByTagName('li');

 //轮播方法
 function carousel(index) {
  let distance = (-index * pic[0].offsetWidth); //计算行走的距离 图片的index值乘以图片的大小
  animove(picbox,distance,10); //调用运动函数
  for (let i = 0; i < pointli.length; i ++) { //for循环移除每个小点的选中状态
  pointli[i].classList.remove('active');
  }
  if (index != pic.length) { //如果不等于pic的长度 就执行
  pointli[index].classList.add('active');
  } else { //如果索引值为3 说明此时图片为克隆的图 而圆点的最大索引值为2 将第一个圆点设置为active即可正常显示圆点状态
  point.children[0].classList.add('active');
  }
 }
 Array.prototype.forEach.call(pointli,function (item,index) { //给每个圆点添加点击事件
  item.addEventListener('click',function () {
   carouselindex = index;  //将点击的索引值赋值给轮播索引全局变量
   carousel(carouselindex);
  })
 });
 rightbtn.addEventListener('click',function () { //右边点击事件
  carouselindex ++; //每次点击全局轮播索引增加
  if (carouselindex > pic.length) { //如果索引大于图片数量 由于数量大小获取的是静态的 所以长度不会因为克隆变化而变化
   picbox.style.left = "0px"; //如果大于索引说明此时要离开克隆的那张图 此时迅速将left值设置为0
   carouselindex = 1; //然后将索引设置为1
  }
  carousel(carouselindex); //这时候就在left为0的位置 过渡到索引1的位置 实现无缝轮播的效果
 });
 leftbtn.addEventListener('click',function () { //左边点击事件
  carouselindex --; //减减
  if (carouselindex < 0) { //如果索引值小于0
  carouselindex = 2; //将索引值设置为2
  picbox.style.left = "-3678px"; //将位置迅速变换为第四张图的位置(克隆的图)
  }
  carousel(carouselindex); //由克隆的图过渡到索引为2的图(第三张图)
})

精彩专题分享:jQuery图片轮播 JavaScript图片轮播 Bootstrap图片轮播

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 构造函数 实例分析
Nov 26 Javascript
js写一个弹出层并锁屏效果实现代码
Dec 07 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
Dec 10 Javascript
js中replace的用法总结
Dec 27 Javascript
JavaScrip常见的一些算法总结
Dec 28 Javascript
Uploadify上传文件方法
Mar 16 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
Apr 07 Javascript
vue-music关于Player播放器组件详解
Nov 28 Javascript
Spring Boot/VUE中路由传递参数的实现代码
Mar 02 Javascript
vue中axios解决跨域问题和拦截器的使用方法
Mar 07 Javascript
jquery实现的分页显示功能示例
Aug 23 jQuery
js滚轮事件 js自定义滚动条的实现
Jan 18 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
Jun 16 #Javascript
js+css实现全屏侧边栏
Jun 16 #Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
Jun 15 #Javascript
通过实例解析JavaScript for in及for of区别
Jun 15 #Javascript
vue proxy 的优势与使用场景实现
Jun 15 #Javascript
原生JS利用transform实现banner的无限滚动示例代码
Jun 15 #Javascript
koa中间件核心(koa-compose)源码解读分析
Jun 15 #Javascript
You might like
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
使用JQuery进行跨域请求
2010/01/25 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
解决Vue @submit 提交后不刷新页面问题
2020/07/18 Javascript
原生js生成图片验证码
2020/10/11 Javascript
python中zip()方法应用实例分析
2016/04/16 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
深入分析python 排序
2020/08/24 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
任课老师推荐信范文
2013/11/24 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
幼儿园国培研修日志
2015/11/13 职场文书