第一部分是HTML部分,外层父元素用相对定位,子元素用绝对定位,通过改变top,left值改变他们的位置。
<div class="carousel"> <div class="img1"> <img src="images/f1.jpg" /> <p>旋转木马1</p> </div> <div class="img2"> <img src="images/f2.jpg" /> <p>旋转木马2</p> </div> <div class="img3"> <img src="images/f3.jpg" /> <p>旋转木马3</p> </div> <div class="img4"> <img src="images/f4.jpg" /> <p>旋转木马4</p> </div> <div class="img5"> <img src="images/f5.jpg" /> <p>旋转木马5</p> </div> <p class="prev"><img src="images/arrow1.png" alt="arrow"/></p> <p class="next"><img src="images/arrow2.png" alt="arrow"/></p> </div>
第二部分就是就是代码的实现
<script> //1.申明变量,保存获取的dom节点,定时器还有是否开启触摸。 var carousel = document.getElementsByClassName("carousel")[0]; var aitem = carousel.getElementsByTagName("div"); var prev = document.getElementsByClassName("prev")[0]; var next = document.getElementsByClassName("next")[0]; var autoplay = true; var timer; if (autoplay == true) { timer = setInterval(left, 3000) } function right() { var fn = new Array(); //创建一个新的数组 for (var i = 0; i < aitem.length; i++) { fn.push(aitem[i].className) //遍历每个li的class类名,保存到一个新的数组里面 } for (var j = 0; j < aitem.length; j++) { if (j == aitem.length - 1) { aitem[j].className = fn[0]; } else { aitem[j].className = fn[j + 1];//向右切换时,遍历每个li,改变他们的class类名,逻辑上每个li的类名要变成原来类名的上一个,最后一个变成第一个类名 } } } function left() { var fn = new Array();//创建一个新的数组 for (var i = 0; i < aitem.length; i++) { fn.push(aitem[i].className) //遍历每个li的class类名,保存到一个新的数组里面 } for (var j = 0; j < aitem.length; j++) { if (j == 0) { aitem[0].className = fn[aitem.length - 1]; } else { aitem[j].className = fn[j - 1];//向右切换时,遍历每个li,改变他们的class类名,逻辑上每个li的类名要变成原来类名的上一个,第一个变成最后一个类名 } } } prev.onclick = function () { right(); //执行向右切换 } next.onclick = function () { left();//执行向左切换 } function touch() { var startx, movex; //绑定触摸的监听事件 carousel.addEventListener("touchstart", touchstart, false); carousel.addEventListener("touchmove", touchmove, false); carousel.addEventListener("touchend", touchend, false); function touchstart(e) { clearInterval(timer) sartx = e.changedTouches[0].clientX;//获取触摸开始时的x坐标 } function touchmove(e) { movex = e.changedTouches[0].clientX - sartx; //获取触摸结束时手指移动的距离 } //判断手指移动的距离,执行向右切换或者向左切换 function touchend() { if (movex > 100) { right() } if (movex < -100) { left() } timer = setInterval(left, 3000) } } touch() </script>