.html 结构
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>轮播图</title> <link rel="stylesheet" href="css/scroll.css"> </head> <body> <div class="scroll"> <!-- 图片区域 --> <div class="scroll-img"> <img class="active" src="img/001.jpg" alt=""> <img src="img/002.jpg" alt=""> <img src="img/003.jpg" alt=""> <img src="img/004.jpg" alt=""> </div> <!-- 右下角切换按钮 --> <ul class="scroll-tag"> <li class="active"></li> <li></li> <li></li> <li></li> </ul> <!-- 左右切换图 --> <div class="scroll-toggle"> <i class="toggle-left"><</i> <i class="toggle-right">></i> </div> </div> </body> <script type="text/javascript" src="js/scroll.js"></script> </html>
.css 样式文件
html, body, ul { margin: 0; padding: 0; } ul { list-style: none; } .scroll, .scroll-img, img { width: 613px; height: 230px; } .scroll { margin: 50px auto; position: relative; /*用户不可拖拽选中*/ user-select: none; } .scroll-img{ position: absolute; } /*设置轮播图片,同位置按照指定状态显示*/ img{ position: absolute; /*不可见*/ opacity: 0; } /*活跃状态下的img,可见*/ img.active{ opacity: 1; } /*右下选图按钮*/ ul{ position: absolute; bottom: 10px; right: 20px; } li{ /*画圈用于点击*/ width: 8px; height: 8px; border: 2px solid #888; border-radius: 50%; float: left; margin-left: 10px; background-color: transparent; /*鼠标悬浮样式*/ cursor: pointer; } /*活跃状态下的li,变色*/ li.active { transition: .2s; background-color: #999; } /*左右切换按钮*/ .toggle-left, .toggle-right { width: 40px; height: 80px; background-color: rgba(255,255, 255, 0.7); line-height: 80px; text-align: center; font-size: 30px; position: absolute; top: 75px; border-radius: 5px; /*默认状态不可见*/ opacity: 0; } .toggle-left { left: 2px; } .toggle-right { right: 2px; } /*鼠标悬浮,可见,鼠标状态改变*/ .scroll:hover .toggle-left, .scroll:hover .toggle-right { transition: .1s; opacity: 1; cursor: pointer; }
.js 文件
// 获取页面内组件信息 let imgs = document.querySelectorAll('img'); let lis = document.querySelectorAll('li'); let toggle_left = document.querySelector('.toggle-left'); let toggle_right = document.querySelector('.toggle-right'); let scroll = document.querySelector('.scroll'); // 活跃的li let li_active = null; // 活跃的img let img_active = null; // 活跃的索引,给imgs和lis使用,二者活跃索引对应 let c_index = 0; // 定时器 let timer = 0; // 自动轮播,定时器放在函数内,方便后续停止和继续播放 function autoPlay() { timer = setInterval(function () { // 清除当前活跃状态 imgs[c_index].className = ""; lis[c_index].className = ""; // 循环的转折,遇3接1 c_index = c_index == 3 ? -1 : c_index; // 轮播索引一次加一 c_index++; // 设置新的活跃状态 imgs[c_index].className = "active"; lis[c_index].className = "active"; // 更新活跃的li|img,服务于点击切换 li_active = lis[c_index]; img_active = imgs[c_index]; },3000) } autoPlay(); // 监控鼠标时间,改变自动轮播状态 scroll.onmouseover = function () { // 清除自动轮播 clearInterval(timer); } scroll.onmouseout = function () { // 重新开启自动轮播 autoPlay(); } // 右下,点击切换动画 for (let i = 0; i < lis.length; i++) { // 记录当前活跃li|img if (lis[i].className == "active") { li_active = lis[i]; img_active = imgs[i]; } // 点击时间 lis[i].onclick = function () { // 切换活跃的li li_active.className = ""; this.className = "active"; li_active = this; // 切换活跃的img img_active.className = ""; imgs[i].className = "active"; img_active = imgs[i]; // 更新活跃的索引,服务于自动轮播 c_index = i; } } // 左右按钮 toggle_left.onclick = function () { // 清除当前活跃状态 li_active.className = ""; img_active.className = ""; // 循环的转折,遇0接3 c_index = c_index == 0 ? 4 : c_index; // 轮播索引一次加一 c_index--; // 设置新的活跃状态 imgs[c_index].className = "active"; lis[c_index].className = "active"; // 更新活跃的li|img,服务于点击切换 li_active = lis[c_index]; img_active = imgs[c_index]; } toggle_right.onclick = function () { // 清除当前活跃状态 imgs[c_index].className = ""; lis[c_index].className = ""; // 循环的转折,遇3接0 c_index = c_index == 3 ? -1 : c_index; // 轮播索引一次加一 c_index++; // 设置新的活跃状态 imgs[c_index].className = "active"; lis[c_index].className = "active"; // 更新活跃的li|img,服务于点击切换 li_active = lis[c_index]; img_active = imgs[c_index]; }