js实现轮播图效果 纯js实现图片自动切换
网络编程 2021-07-04 14:06www.168986.cn编程入门
这篇文章主要为大家详细介绍了js实现轮播图效果,图片自动切换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了纯js实现图片自动切换的具体代码,供大家参考,具体内容如下
1.鼠标经过的时候左右两个小按钮会自动弹出,自动播放停止,点击左右小按钮可以切换图片;
2. 鼠标离开,恢复自动播放;
3. 点击下方中间几个小圆圈,也会自动切换图片;
源代码
<!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; : 50%; margin-: -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; : 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> <!-- 图片大小全部是520280 --> <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) }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程