js实现轮播图效果 纯js实现图片自动切换


Posted in Javascript onAugust 09, 2020

本文实例为大家分享了纯js实现图片自动切换的具体代码,供大家参考,具体内容如下

1.鼠标经过的时候左右两个小按钮会自动弹出,自动播放停止,点击左右小按钮可以切换图片;
2. 鼠标离开,恢复自动播放;
3. 点击下方中间几个小圆圈,也会自动切换图片;

js实现轮播图效果 纯js实现图片自动切换

js实现轮播图效果 纯js实现图片自动切换

源代码:

<!DOCTYPE html>


<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
 <style>
  * {
   margin: 0;
   padding: 0;
  }

  /* 轮播图盒子样式 */
  .lunbotu {
   position: relative;
   width: 520px;
   height: 280px;
   margin: 50px auto;
   background-color: blue;
   overflow: hidden;
  }

  /* 左右按钮样式 */
  .left,
  .right {
   display: none;
   position: absolute;
   top: 50%;
   margin-top: -15px;
   width: 30px;
   height: 30px;
   background-color: cornsilk;
   border-radius: 15px;
   text-align: center;
   line-height: 30px;
   cursor: pointer;
   z-index: 1;
  }

  .left {
   left: 0;
  }

  .right {

   right: 0;
  }


  li {
   list-style: none;
  }

  /* 设置图片的ul的样式 */
  .firstul {
   position: absolute;
   top: 0;
   left: 0;
   width: 500%;

  }

  .firstul li {
   float: left;
   /* display: none; */
  }

  /* 设置小圆圈的样式 */
  ol {
   /* width: 90px; */
   padding: 0 5px 0 5px;
   position: absolute;
   bottom: 10px;
   left: 50%;
   margin-left: -45px;
   background-color: darkgrey;
   text-align: center;
   border-radius: 9px;
  }

  ol li {
   display: inline-block;
   width: 15px;
   height: 15px;
   border-radius: 50%;
   margin-right: 5px;
   background-color: white;
   cursor: pointer;
  }

  .current {
   background-color: red;
  }
 </style>
 <script src="animation.js"></script>
</head>

<body>
 <!-- 图片大小全部是520*280 -->
 <div class="lunbotu">
  <!-- 左右按钮 -->
  <div class="left">></div>
  <div class="right"><</div>
    <!-- 图片部分 -->
    <ul class="firstul">
     <li><a href=""><img src=" images/1.jpg" alt=""> </a></li>
     <li><a href=""><img src=" images/2.jpg" alt=""> </a></li>
     <li><a href=""><img src=" images/3.gif" alt=""> </a></li>
     <li><a href=""><img src=" images/4.webp" alt=""> </a></li>
    </ul>
    <!-- 小圆圈 -->
    <ol class="firstol"></ol>
  </div>
  <!-- JS部分 -->
  <script>
   // 1.获取事件源
   var lunbotu = document.querySelector('.lunbotu');
   var leftBox = document.querySelector('.left');
   var rightBox = document.querySelector('.right');
   var ul = lunbotu.querySelector('ul');
   var ol = lunbotu.querySelector('ol');
   var right = document.querySelector('.right');
   var left = document.querySelector('.left');
   var lunbotuWidth = lunbotu.offsetWidth;
   // console.log(ul)
   // console.log(ol)
   // 第一步:
   // 鼠标经过轮播图的时候,左右小按钮弹出
   lunbotu.addEventListener('mouseenter', function () {
    leftBox.style.display = 'block';
    rightBox.style.display = 'block';
    // 鼠标经过轮播图的时候,停止定时器
    clearInterval(timer);
   })
   // 鼠标离开轮播图的时候,左右小按钮隐藏
   lunbotu.addEventListener('mouseleave', function () {
    leftBox.style.display = 'none';
    rightBox.style.display = 'none';
    timer = setInterval(function () {
     right.click();
    }, 2000)

   })
   // 第二步:
   // 1.动态生成小圆圈
   // 2.小圆圈的个数要跟图片一样
   // 3.先得到ul里面图片的张数(图片放入li里面,所以就是li的个数)
   // 4.利用循环动态生成小圆圈(这个小圆圈要放入ol里面)
   // 5.创建节点createElement('li')]
   // 6.插入节点ol.appendChild(li)
   // 7.第一个小圆圈需要添加current类
   for (var i = 0; i < ul.children.length; i++) {
    // 创建一个li
    var li = document.createElement('li')
    // 记录当前小圆圈的索引号 通过自定义属性来做
    li.setAttribute('index', i);
    // 把li添加到ol
    ol.appendChild(li);
   }
   // 排他思想:让小Li变白色
   for (var i = 0; i < ol.children.length; i++) {
    ol.children[i].addEventListener('click', function () {
     for (var i = 0; i < ol.children.length; i++) {
      ol.children[i].className = '';
     } this.className = 'current';

     // 点击小圆圈的时候切换到对应的图片
     // 得到索引号 index
     var index = this.getAttribute('index');
     // 解决小bug
     num = index;
     num_ol = index;
     // console.log(lunbotuWidth);
     // console.log(index)
     animation(ul, - index * lunbotuWidth)
    })
   }
   // 给第一个li变颜色
   ol.children[0].className = 'current';
   // 克隆第一个li
   var first = ul.children[0].cloneNode(true);
   ul.appendChild(first);
   // 第三步:
   // 点击右边按钮事件
   var num = 0;
   // 点击右侧按钮的时候小圆圈跟着滚动
   var num_ol = 0;
   // 节流阀,防止点击过快,最后才加这句优化
   var flag = true;
   // 右侧按钮:
   right.addEventListener('click', function () {
    if (flag) {
     flag = false; // 关闭节流阀
     if (num == ul.children.length - 1) {
      ul.style.left = 0;
      num = 0;
     }
     num++;
     animation(ul, -num * lunbotuWidth, function () {
      flag = true;
     });
     num_ol++;
     if (num_ol == ol.children.length) {
      num_ol = 0
     }
     for (var i = 0; i < ol.children.length; i++) {
      ol.children[i].className = '';
     }
     ol.children[num_ol].className = 'current';
    }
   });
   // 左侧按钮:
   left.addEventListener('click', function () {
    if (flag) {
     flag = false;
     if (num == 0) {
      ul.style.left = -(ul.children.length - 1) * lunbotuWidth + 'px';
      num = ul.children.length - 1;
     }
     num--;
     animation(ul, -num * lunbotuWidth, function () {
      flag = true;
     });
     num_ol--;
     // num_ol=0的时候需要,点击左侧按钮,需要转跳到ol.children.length-1的位置
     if (num_ol < 0) {
      num_ol = ol.children.length - 1
     }
     for (var i = 0; i < ol.children.length; i++) {
      ol.children[i].className = '';
     }
     ol.children[num_ol].className = 'current';
    }
   });
   // 自动播放图片
   var timer = setInterval(function () {
    right.click();
   }, 2000)
  </script>
</body>
</html>

5.Js文件的代码

// 封装了一个动画js文件
function animation(obj,target,fn1){
 // console.log(fn1);
 // fn是一个回调函数,在定时器结束的时候添加
 // 每次开定时器之前先清除掉定时器
 clearInterval( obj.timer);
 obj.timer = setInterval(function(){
 // 步长计算公式 越来越小
 // 步长取整
 var step = (target - obj.offsetLeft) /10;
 step = step > 0 ? Math.ceil(step) :Math.floor(step); 

 if(obj.offsetLeft == target){
  clearInterval( obj.timer);
  // 如果fn1存在,调用fn
  if(fn1){
  fn1();
  }
 }else{
  // 每50毫秒就将新的值给obj.left
 obj.style.left = obj.offsetLeft +step +'px';
 }
 },30)
}

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

Javascript 相关文章推荐
javascript支持firefox,ie7页面布局拖拽效果代码
Dec 20 Javascript
JS获取IP、MAC和主机名的五种方法
Nov 14 Javascript
showModelDialog弹出文件下载窗口的使用示例
Nov 19 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
Feb 21 Javascript
JavaScript控制table某列不显示的方法
Mar 16 Javascript
JavaScript事件委托实例分析
May 26 Javascript
ES6中module模块化开发实例浅析
Apr 06 Javascript
JavaScript实现三级联动效果
Jul 15 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
Feb 18 jQuery
JavaScript的Object.defineProperty详解
Jul 09 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
Aug 30 Javascript
微信小程序scroll-view的滚动条设置实现
Mar 02 Javascript
vue 子组件watch监听不到prop的解决
Aug 09 #Javascript
vue 重塑数组之修改数组指定index的值操作
Aug 09 #Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
Aug 09 #Javascript
bootstrap实现tab选项卡切换
Aug 09 #Javascript
vue动画—通过钩子函数实现半场动画操作
Aug 09 #Javascript
js利用iframe实现选项卡效果
Aug 09 #Javascript
解决vue 退出动画无效的问题
Aug 09 #Javascript
You might like
php str_replace的替换漏洞
2008/03/15 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
使用php显示搜索引擎来的关键词
2014/02/13 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
Python中处理时间的几种方法小结
2015/04/09 Python
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
python pytest进阶之fixture详解
2019/06/27 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
Python tkinter常用操作代码实例
2020/01/03 Python
Python reversed函数及使用方法解析
2020/03/17 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
python定义具名元组实例操作
2021/02/28 Python
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
小孩百日宴答谢词
2014/01/15 职场文书
关于读书的活动方案
2014/08/14 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
迎国庆演讲稿
2014/09/15 职场文书
公司离职证明标准格式
2014/11/18 职场文书
党员先进事迹材料
2014/12/19 职场文书
加薪通知
2015/04/25 职场文书
师范生见习总结范文
2015/06/23 职场文书