使用原生JS制作轮播图
利用将图片组合为一个序列,然后通过移动和父元素的overflow:hidden实现轮播
效果图:
基础的html代码:
<div id="box2"> <img id="L" src="pic/L.png"/> <img id="R" src="pic/R.png"/> <ul id="dot"> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> <div id="imgbox"> <img src="pic/1.jpg"/> <img src="pic/2.jpg"/> <img src="pic/3.jpg"/> <img src="pic/4.jpg"/> <img src="pic/5.jpg"/> </div>
CSS代码:
ul,li{ list-style: none; } #box1{ position: relative; width: 100%; height: 313px; } #box2{ position: relative; width: 500px; height: 313px; overflow: hidden; margin: auto; } #L,#R{ position: absolute; width: 37.8px; height: 57.4px; z-index: 2; cursor:pointer; top:50%; margin-top:-20px; display:block; } #L{ left: 0; } #R{ right: 0; } #imgbox{ position: absolute; width: 100%; height: 100%; left: 0px; top: 0; z-index: 1; //设置淡入淡出 transition-duration: 1s; transition-timing-function: ease-in-out; } #imgbox img{ float: left; width: 500px; height: 313px; } #dot{ position: absolute; right: 180px; bottom: 0px; z-index: 2; } #dot li{ width: 10px; height: 10px; float: left; border-radius: 100%; margin-right: 18px; background-color: rgb(153,50,204); }
关键的JS代码:
//获取各元素已便于后续操作 var boxele2 = document.getElementById("box2"); var imgboxele = document.getElementById("imgbox"); var doteles = document.getElementById("dot").getElementsByTagName("li"); var Lrow = document.getElementById("L"); var Rrow = document.getElementById("R"); var currentIndex = 0; var parIndex = 0; var time = null; time = window.setInterval(nextImg,1000); //圆点绑定事件 for(var i=0; i<doteles.length;i++){ doteles[i].setAttribute("id",i); doteles[i].addEventListener("mouseenter",overDot); } //左右箭头绑定事件 Lrow.addEventListener("click",preImg); Rrow.addEventListener("click",nextImg); //设置鼠标悬停时停止轮播以及箭头浮现 boxele2.addEventListener("mouseover",function() { window.clearInterval(time); Lrow.style.display = "block"; Rrow.style.display = "block"; }); //鼠标离开后继续轮播,箭头隐藏 boxele2.addEventListener("mouseout",function() { time = window.setInterval(nextImg,1000); Lrow.style.display = "none"; Rrow.style.display = "none"; }); changeDot(currentIndex,parIndex); //获取当前图片的id function overDot(){ parIndex = currentIndex; currentIndex = parseInt(this.id); changeDot(parIndex,currentIndex); moveImg(); } //图片切换原理:将图片组合成一个序列后移动来选择显示哪张图片 function moveImg(){ imgboxele.style.top = -currentIndex * 313 + "px"; } //设置圆点的颜色 function changeDot(parIndex,currentIndex){ doteles[parIndex].style.backgroundColor = "rgb(153,50,204)"; doteles[currentIndex].style.backgroundColor = "rgb(173,255,47)"; } //切换上一张图片 function preImg(){ parIndex = currentIndex; if(currentIndex != 0){ currentIndex--; }else{ currentIndex = 4; } changeDot(parIndex,currentIndex); moveImg(); } //切换下一张图片 function nextImg(){ parIndex = currentIndex; if(currentIndex != 4){ currentIndex++; }else{ currentIndex = 0; } changeDot(parIndex,currentIndex); moveImg(); }