效果

代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
* {
margin: 0;
padding: 0;
}
.content {
width: 400px;
height: 250px;
border: 1px solid #ccc;
margin: 100px auto;
}
.slideContainer{
width: 400px;
height: 250px;
position: relative;
overflow: hidden;
}
.slideContainer ul {
height: 400px;
width: 250px;
position: absolute;
list-style: none;
left:0;
top: 0;
}
.slideContainer ul li {
float: left;
width: 400px;
height: 250px;
}
.slideContainer ul li img{
height: 100%;
width: 100%;
}
.bar {
position: absolute;
height: 20px;
bottom: 20px;
left: 0;
right: 0;
text-align: center;
padding: 5px;
}
.bar li{
display: inline-block;
width: 20px;
height: 20px;
border-radius: 10px;
line-height: 20px;
background-color: rgb(141, 143, 146);
cursor: pointer;
}
ol .current{
background-color: white;
}
#change{
display: none;
}
#change span{
width: 40px;
height: 40px;
position: absolute;
left: 5px;
top: 50%;
margin-top: -20px;
background: #fff;
cursor: pointer;
line-height: 40px;
text-align: center;
font-weight: bold;
font-family: '黑体';
font-size: 30px;
color: #000;
opacity: 0.5;
border: 1px solid #fff;
}
#change #right {
right: 5px;
left: auto;
}
</style>
</head>
<body>
<div class="content">
<div class="slideContainer">
<ul>
<li><a href="#"><img src="images/1.jpg" alt=""></a></li>
<li><a href="#"><img src="images/2.jpg" alt=""></a></li>
<li><a href="#"><img src="images/3.jpg" alt=""></a></li>
<li><a href="#"><img src="images/4.jpg" alt=""></a></li>
</ul>
<ol class="bar">
<li index="1">1</li>
<li index="2">2</li>
<li index="3">3</li>
<li index="4">4</li>
</ol>
<div id="change">
<span id="left">
<
</span>
<span id="right">
>
</span>
</div>
</div>
</div>
<script>
var slideContainer=document.querySelector('.slideContainer');
var imgUlNode=document.querySelector('.slideContainer ul');
var imgLiNodes=imgUlNode.children;
var buttonOlNode=document.querySelector('.bar');
var buttonLiNodes = document.querySelectorAll('.bar li')
var change=document.querySelector('#change');
var imgWidth=slideContainer.offsetWidth;
var right=document.querySelector('#right');
var left=document.querySelector('#left');
var pic=0;
buttonOlNode.children[0].className = "current";
imgUlNode.appendChild(imgUlNode.children[0].cloneNode(true));
imgUlNode.style.width = imgLiNodes.length*imgWidth + 'px'
var timeId=setTimeout(onmouseclickHandle,1000);
function onmouseclickHandle() {
if (pic == imgLiNodes.length - 1) {
pic = 0;
imgUlNode.style.transition = '';
imgUlNode.style.left = 0 + "px";
timeId=setTimeout(onmouseclickHandle, 100);
}
else {
pic++;
imgUlNode.style.transition = 'left 1s'
imgUlNode.style.left = -pic*imgWidth + 'px'
if (pic == imgLiNodes.length - 1) {
buttonLiNodes[buttonLiNodes.length - 1].className = "";
buttonLiNodes[0].className = "current";
timeId=setTimeout(onmouseclickHandle,900);
} else {
for (var i = 0; i < buttonLiNodes.length; i++) {
buttonLiNodes[i].removeAttribute("class");
}
buttonLiNodes[pic].className = "current";
timeId=setTimeout(onmouseclickHandle,1000);
}
}
}
for(var i=0;i<buttonLiNodes.length;i++){
buttonLiNodes[i].onclick=function () {
for (var j=0;j<buttonLiNodes.length;j++){
buttonLiNodes[j].removeAttribute("class");
}
this.className="current";
pic=this.getAttribute("index");
imgUlNode.style.left = -pic*imgWidth + 'px'
}
}
slideContainer.onmouseover=function () {
change.style.display="block";
clearTimeout(timeId);
};
slideContainer.onmouseout=function () {
change.style.display="none";
clearTimeout(timeId)
timeId=setTimeout(onmouseclickHandle, 1000);
};
right.onclick=onmouseclickHandle;
left.onclick=function () {
if (pic==0){
pic=imgLiNodes.length-1;
imgUlNode.style.left=-pic*imgWidth+"px";
}
pic--;
imgUlNode.style.left = -pic*imgWidth + 'px'
for (var i = 0; i < buttonOlNode.children.length; i++) {
buttonOlNode.children[i].removeAttribute("class");
}
buttonOlNode.children[pic].className = "current";
};
</script>
</body>
</html>
关键部分
使用setTimeout来对left值进行修改,然后在回调函数中又启动另一次的setTimeout。 并且配合css3的过渡实现滑动的效果。只需要注意怎么从最后一张图片滑到第一张,方案是将第一张图片拷贝一个结点放到最后。 还需要通过js修改样式后,实际不是马上更新的,而是再下一次重绘的时机做的更新,页面重绘的频率一般可以认为是60ms。
参考
《JS实现图片轮播效果(自动和手动)》
|