为啥轮播图得用图片计数的变量idx,而那个动画用普通的变量去改变left值就行?
来源:6-3 编写跑马灯轮播图特效
张小阳_
2022-07-13 17:18:41
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>轮播图</title> <style> * { padding: 0; margin: 0; list-style: none; text-decoration: none; } .carousel { width: 650px; height: 360px; margin: 0 auto; position: relative; overflow: hidden; } .carousel ul { width: 6000px; position: absolute; left: 0; transition: left 1s ease-in-out; } .carousel ul li { float: left; } .carousel .leftBtn { width: 30px; height: 30px; border-radius: 50%; position: absolute; left: 15px; top: 50%; margin-top: -15px; text-align: center; line-height: 30px; font-size: 20px; background-color: rgba(0, 0, 0, .2); } .carousel .rightBtn { width: 30px; height: 30px; border-radius: 50%; position: absolute; right: 15px; top: 50%; margin-top: -15px; text-align: center; font-size: 20px; background-color: rgba(0, 0, 0, .2); } .carousel a:hover { background-color: rgba(0, 0, 0, .4); } </style> </head> <body> <div class="carousel"> <ul> <li><img src="./images/0.jpg" alt=""></li> <li><img src="./images/1.jpg" alt=""></li> <li><img src="./images/2.jpg" alt=""></li> <li><img src="./images/3.jpg" alt=""></li> <li><img src="./images/4.jpg" alt=""></li> </ul> <a class="leftBtn" id="leftBtn" href="javascript:;"><</a> <a class="rightBtn" id="rightBtn" href="javascript:;">></a> </div> <script> var leftBtn = document.getElementById('leftBtn'); var rightBtn = document.getElementById('rightBtn'); var ul = document.querySelector('.carousel ul'); // 克隆第一张图 var cloneImg = ul.firstElementChild.cloneNode(true); ul.appendChild(cloneImg); // 表示显示到第几张图,从0开始! var idx = 0; var lock = true; //节流锁 rightBtn.onclick = function () { //先过渡到假图上,再瞬间定位到正常图上 if (!lock) return; ul.style.transition = 'left 1s ease-in-out'; //把失去的过渡,再次添加上 idx++; if (idx > 4) { setTimeout(function () { //给它跳到假图的时间,然后瞬间定位到第一张 idx = 0; ul.style.left = 0; ul.style.transition = 'none'; }, 1000); } ul.style.left = -idx * 650 + 'px'; lock = false; setTimeout(function () { lock = true; }, 1000); }; // 先瞬间定位到假图上,再过渡到正常图上 leftBtn.onclick = function () { if (!lock) return; if (idx == 0) { idx = 5; ul.style.left = -idx * 650 + 'px'; ul.style.transition = 'none'; // 将过度添加上 setTimeout(function () { ul.style.transition = 'left 1s ease-in-out'; idx = 4; ul.style.left = -idx * 650 + 'px'; }, 0); } else { idx--; ul.style.left = -idx * 650 + 'px'; } lock = false; setTimeout(function () { lock = true; }, 1000); }; </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>无缝练习滚动特效</title> <style> * { padding: 0; margin: 0; list-style: none; } #box { width: 1000px; height: 146px; margin: 20px auto; border: 2px solid #333; overflow: hidden; } #box ul { width: 2500px; position: relative; left: 0; } #box ul li { float: left; } #box ul li img { width: 200px; } </style> </head> <body> <div id="box"> <ul id="list"> <li><img src="./images/logo_img_0.png" alt=""></li> <li><img src="./images/logo_img_1.png" alt=""></li> <li><img src="./images/logo_img_2.png" alt=""></li> <li><img src="./images/logo_img_3.png" alt=""></li> <li><img src="./images/logo_img_4.png" alt=""></li> <li><img src="./images/logo_img_5.png" alt=""></li> </ul> </div> <script> // 复制一份 var list = document.getElementById('list'); list.innerHTML += list.innerHTML; // 运行函数 move(); var leftMove = 0; var timer; function move() { timer = setInterval(function () { leftMove -= 3; list.style.left = leftMove + 'px'; if (leftMove <= - 1200) { leftMove = 0; } }, 20); }; // 移入停止 var box = document.getElementById('box'); box.onmouseenter = function () { clearInterval(timer); }; // 移出继续运行 box.onmouseleave = function () { move(); }; </script> </body> </html>
它俩有啥区别?
可以通用吗?
1回答
同学你好,两者的效果不同,前者是涉及到左右按钮的相关效果;当点击左右按钮的时候需要确定当前ul显示到第几张了,从0张开始,当点击右按钮的时候设置延时器,延时器的功能就是将ul瞬间拉回0的位置,然后监听左按钮判断是不是第0张,如果是,就要瞬间用假的替换真的;
后者是无缝轮播,效果当鼠标移入的时候轮播停止,当移出的时候,继续动画,不需要复杂的思路;
但是两者的思想是 一样的,需要去获取移动的距离;
可以根据效果,自行选择实现方式;
祝学习愉快~
相似问题