原生js实现无缝轮播图效果


Posted in Javascript onJanuary 28, 2021

原生js实现轮播图效果(无缝滚动) ,供大家参考,具体内容如下

效果图:

原生js实现无缝轮播图效果

代码:

<!DOCTYPE html>
<html lang="en">
<!-- day07 7-10-14 -->
 
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
 <script src="./images1/20.animate.js"></script>
 <style>
 * {
  margin: 0;
  padding: 0;
 }
 
 li {
  list-style: none;
 }
 
 .focus {
  /*overflow: hidden;*/
  position: absolute;
  top: 100px;
  left: 200px;
  width: 721px;
  height: 455px;
  background-color: brown;
 }
 
 .prev,
 .next {
  display: none;
  position: absolute;
  top: 50%;
  margin-top: -15px;
  width: 20px;
  height: 30px;
  background-color: rgba(0, 0, 0, .3);
  text-decoration: none;
  color: #fff;
  line-height: 30px;
  text-align: center;
  font-size: 16px;
  z-index: 2;
 }
 
 .focus ul {
  /* 引入动画js文件要求必须有定位 */
  position: absolute;
  width: 600%;
 }
 
 .focus ul li {
  float: left;
 }
 
 .prev {
  left: 0;
  border-top-right-radius: 15px;
  border-bottom-right-radius: 15px;
 }
 
 .next {
  right: 0;
  border-top-left-radius: 15px;
  border-bottom-left-radius: 15px;
 }
 
 .promo-nav {
  position: absolute;
  bottom: 10px;
  left: 60px;
  width: 200px;
  height: 18px;
  border-radius: 9px;
 }
 
 .promo-nav li {
  float: left;
  width: 10px;
  height: 10px;
  background-color: #fff;
  margin: 2px;
  border-radius: 50%;
 }
 
 .promo-nav .current {
  background-color: orange;
 }
 .focus ul li a img {
  width: 721px;
  height: 455px;
 }
 </style>
</head>
 
<body>
 <div class="focus">
 <ul>
  <li>
  <a href="#" ><img src="images1/focu01.jpg" alt=""></a>
  </li>
  <li>
  <a href="#" ><img src="images1/focu02.jpg" alt=""></a>
  </li>
 
  <li>
  <a href="#" ><img src="images1/focu03.jpg" alt=""></a>
  </li>
  <li>
  <a href="#" ><img src="images1/focu04.jpg" alt=""></a>
  </li>
 
 </ul>
 <!-- 左侧按钮 -->
 <a href="javascript:;" class="prev"><</a>
 <!-- 右侧按钮 -->
 <a href="javascript:;" class="next">></a>
 
 <ol class="promo-nav">
 
 </ol>
 </div>
 <script>
 window.addEventListener('load', function() {
  var focus = document.querySelector('.focus');
  var prev = document.querySelector('.prev');
  var next = document.querySelector('.next');
  var focusWidth = focus.offsetWidth;
  //鼠标经过
  focus.addEventListener('mouseenter', function() {
   prev.style.display = 'block';
   next.style.display = 'block';
   clearInterval(timer);
   timer = null; //清除定时器变量
 
  })
  //鼠标离开
  focus.addEventListener('mouseleave', function() {
   prev.style.display = 'none';
   next.style.display = 'none';
   timer = setInterval(function() {
   next.click();
   }, 2000)
 
  })
  //3.动态生成小圆圈 有几张图片 就生成几个小圆圈
  var ul = focus.querySelector('ul');
  var ol = focus.querySelector('.promo-nav');
  // console.log(ul.children.length); 4
  for (var i = 0; i < ul.children.length; i++) {
  //创建一个li
  var li = document.createElement('li');
  //记录当前小圆圈的索引号 通过自定义属性来做
  li.setAttribute('index', i);
  //插入到ol后面
  ol.appendChild(li);
  //4.鼠标点击小圆圈小圆圈变色(给小圆圈添加current类其余小圆圈移除这个类)(排他思想)
  //在生成小圆圈的同时直接绑定点击事件
  li.addEventListener('click', function() {
   for (var i = 0; i < ol.children.length; i++) {
   ol.children[i].className = '';
   }
   this.className = 'current';
 
 
   //5.点击小圆点 移动图片 移动的是ul
   //ul移动的距离 小圆圈的索引号乘以图片宽度 注意是负值
   //当我们点击了某个小li就得到了当前小li的索引号
   var index = this.getAttribute('index');
   //当我们点击了某个li就把li的索引号给num
   num = index;
   //当我们点击了某个li就把li的索引号给index
   circle = index;
   console.log(index);
 
   animate(ul, -index * focusWidth, );
  })
 
  }
  //把ol里面的第一个li北京颜色设置成白色
  ol.children[0].className = 'current';
  //6. 克隆第一张li放到ul后面
  var first = ul.children[0].cloneNode(true);
  ul.appendChild(first);
  //7.点击右侧按钮图片滚动一张
  var num = 0;
  var circle = 0;
  var flag = true;
  //右侧按钮
  next.addEventListener('click', function() {
   if (flag) {
   flag = false; //先关闭节流阀
   //5.如果走到最后一张复制图片此时ul快速复原 left改为0(无缝滚动)
   if (num == ul.children.length - 1) {
    ul.style.left = 0;
    num = 0;
   }
   num++;
   animate(ul, -num * focusWidth, function() {
    flag = true;
   });
   //8.点击右侧按钮小圆圈跟随一起变化 声明一个变量控制小圆圈变化
   circle++;
   //如果 circle等于4说明做到最后克隆的这张图片了 我们就复原
   if (circle == ol.children.length) {
    circle = 0;
   }
   // //清除其余小圆圈类名
   // for (var i = 0; i < ol.children.length; i++) {
   // ol.children[i].className = '';
   // }
   // //留下当前小圆圈current类名
   // ol.children[circle].className = 'current';
   circleChange();
   }
  })
  //左侧按钮
  prev.addEventListener('click', function() {
  if (flag) {
   flag = false;
   //5.如果走到最后一张复制图片此时ul快速复原 left改为0(无缝滚动)
   if (num == 0) {
   num = ul.children.length - 1;
   ul.style.left = -num * focusWidth + 'px';
 
   }
   num--;
   animate(ul, -num * focusWidth, function() {
   flag = true;
   });
   //8.点击右侧按钮小圆圈跟随一起变化 声明一个变量控制小圆圈变化
   circle--;
   //如果 circle小于0小圆圈要改为第四个小圆圈
   if (circle < 0) {
   circle = ol.children.length - 1;
   }
   // 清除其余小圆圈类名
   // for (var i = 0; i < ol.children.length; i++) {
   // ol.children[i].className = '';
   // }
   // 留下当前小圆圈current类名
   // ol.children[circle].className = 'current';
   circleChange();
  }
  })
 
  function circleChange() {
  //清除其余小圆圈类名
  for (var i = 0; i < ol.children.length; i++) {
   ol.children[i].className = '';
  }
  //留下当前小圆圈current类名
  ol.children[circle].className = 'current';
  }
 
  //10.自动播放轮播图
  var timer = setInterval(function() {
  next.click();
  }, 2000)
 
 })
 </script>
</body>
 
</html>

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

Javascript 相关文章推荐
用js 让图片在 div或dl里 居中,底部对齐
Jan 21 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
Jan 09 Javascript
JS控制表单提交的方法
Jul 09 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
Sep 14 Javascript
window.open打开窗口被拦截的快速解决方法
Aug 04 Javascript
bootstrap的工具提示实例代码
May 17 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
Jul 08 jQuery
JScript实现地址选择功能
Aug 15 Javascript
webpack4.x打包过程详解
Jul 18 Javascript
JavaScript实现简单的弹窗效果
May 19 Javascript
js实现从右往左匀速显示图片(无缝轮播)
Jun 29 Javascript
微信小程序tab左右滑动切换功能的实现代码
Feb 08 Javascript
JavaScript实现4位随机验证码的生成
Jan 28 #Javascript
JavaScript点击按钮生成4位随机验证码
Jan 28 #Javascript
Vue ​v-model相关知识总结
Jan 28 #Vue.js
Vue 数据响应式相关总结
Jan 28 #Vue.js
node使用async_hooks模块进行请求追踪
Jan 28 #Javascript
JavaScript如何实现防止重复的网络请求的示例
Jan 28 #Javascript
JavaScript实现跟随鼠标移动的盒子
Jan 28 #Javascript
You might like
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
php实现评论回复删除功能
2017/05/23 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
用js解决数字不能换行问题
2010/08/10 Javascript
json对象转字符串如何实现
2012/12/02 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
用javascript将数据导入Excel示例代码
2014/09/10 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
关于Layui Table隐藏列问题
2019/09/16 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
老生常谈Python序列化和反序列化
2017/06/28 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
Python中的Django基本命令实例详解
2018/07/15 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
python利用faker库批量生成测试数据
2020/10/15 Python
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
广播体操口号
2014/06/18 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
Go中的条件语句Switch示例详解
2021/08/23 Golang
Python 数据可视化之Seaborn详解
2021/11/02 Python