原生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 call方法使用说明
Jan 11 Javascript
JS关键字变色实现思路及代码
Feb 21 Javascript
js 将json字符串转换为json对象的方法解析
Nov 13 Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 Javascript
使用jQuery监听DOM元素大小变化
Feb 24 Javascript
微信小程序 火车票查询实例讲解
Oct 17 Javascript
three.js快速入门【推荐】
Jan 21 Javascript
js实现无缝滚动图
Feb 22 Javascript
浅谈react性能优化的方法
Sep 05 Javascript
vue element动态渲染、移除表单并添加验证的实现
Jan 16 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
May 10 Javascript
javascript实现导航栏分页效果
Jun 27 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
全国FM电台频率大全 - 4 山西省
2020/03/11 无线电
PHP 程序员的调试技术小结
2009/11/15 PHP
pdo中使用参数化查询sql
2011/08/11 PHP
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
js tab效果的实现代码
2009/12/26 Javascript
JavaScript四种调用模式和this示例介绍
2014/01/02 Javascript
JS数组合并push与concat区别分析
2015/12/17 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
2016/09/09 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
python构建深度神经网络(续)
2018/03/10 Python
python解决字符串倒序输出的问题
2018/06/25 Python
PyTorch的深度学习入门之PyTorch安装和配置
2019/06/27 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
采用专利算法搜索最廉价的机票:CheapAir
2016/09/10 全球购物
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
《四季》教学反思
2014/04/08 职场文书
投标授权委托书范文
2014/08/02 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL