需求:html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>原生JS輪播圖</title> <style> *{ margin: 0; padding: 0; } .outer{ position: relative; top: 20px; cursor: pointer; } .outer .img-box .img-item { display: none; position: absolute; top: 0; left: 50%; transform: translateX(-50%); } .active{ display: block !important; } .outer ul{ position: absolute; top: 250px; left: 50%; transform: translateX(-50%); text-align: center; } .outer ul li.page-number{ list-style-type: none; display: inline-block; color: black; margin: 0 6px; font-size: 12px; width: 20px; height: 20px; background-color: #05dfff; line-height: 20px; text-align: center; border-radius: 50%; } .page-active{ background-color: #0000FF !important; } .outer .mover{ position: absolute; top: 110px; left: 50%; height: 60px; width: 40px; background-color: rgba(255,255,255,0.65); line-height: 60px; text-align: center; font-size: 26px; display: none; user-select: none; /*用戶點擊時,內容不能被選中*/ } .outer .leftMover{ margin-left: -260px; } .outer .rightMover{ margin-left: 220px; } </style> </head> <body> <div id="outer" class="outer"> <div class="img-box"> <img src="../img/1.jpg" class="img-item active"> <img src="../img/2.jpg" class="img-item"> <img src="../img/3.jpg" class="img-item"> <img src="../img/4.jpg" class="img-item"> </div> <ul> <li class="page-number page-active">1</li> <li class="page-number">2</li> <li class="page-number">3</li> <li class="page-number">4</li> </ul> <a id="leftMover" class="mover leftMover"><</a> <a id="rightMover" class="mover rightMover">></a> </div> <script> var objectImgItems = document.getElementsByClassName("img-item"); var objectRowItems = document.getElementsByClassName("page-number"); var objectOuter = document.getElementById("outer"); var objectMover = document.getElementsByClassName("mover"); var objectLeftMover = document.getElementById("leftMover"); var objectRightMover = document.getElementById("rightMover"); <!-- 獲取node在nodeList中的索引值 --> function getIndex(node, nodeList) { for (var index=0; index<nodeList.length; index++){ if (nodeList[index] === node){ return index } } } <!-- 根據傳入的頁碼索引值,轉換圖片和頁碼 --> function move(numberIndex) { for (var i=0; i<objectImgItems.length; i++){ if (i === numberIndex) { objectImgItems[i].classList.add("active"); objectRowItems[i].classList.add("page-active"); } else { objectImgItems[i].classList.remove("active"); objectRowItems[i].classList.remove("page-active"); } } } <!-- 鼠標覆蓋頁碼時,圖片和頁碼進行轉換 --> for (var i=0; i<objectRowItems.length; i++){ objectRowItems[i].onmouseover = function () { var numberIndex = getIndex(this, objectRowItems); move(numberIndex); pageNumber = numberIndex; }; } <!-- 鼠標移動到整個模塊,則顯示左右移動的圖標,圖片中止自動轉換 --> objectOuter.onmouseover = function () { clearInterval(intervalId); for (var i=0; i<objectMover.length; i++){ objectMover[i].classList.add("active"); } }; <!-- 鼠標離開整個模塊,則隱藏左右移動的圖標,圖片開始自動轉換 --> objectOuter.onmouseout = function () { intervalId = setInterval(directionMove, 2000); for (var i=0; i<objectMover.length; i++){ objectMover[i].classList.remove("active"); } }; <!-- 添加頁碼變量,經過自增、自減,實現左右轉換 --> var pageNumber = 0; function directionMove(isLeft) { if (isLeft){ if (pageNumber === 0) { pageNumber = 4; } pageNumber--; } else { if (pageNumber === 3) { pageNumber = -1; } pageNumber++; } move(pageNumber); } <!-- 添加定時器,實現自動轉換 --> var intervalId = setInterval(directionMove, 2000); <!-- 右轉換 --> objectRightMover.onclick = function () { directionMove(); }; <!-- 左轉換 --> objectLeftMover.onclick = function () { directionMove(true); } </script> </body> </html>