<body>
<div class="carousel">
<ul id="list">
<li><img src="../javascript/images/beijing/0.jpg" alt=""></li>
<li><img src="../javascript/images/beijing/1.jpg" alt=""></li>
<li><img src="../javascript/images/beijing/2.jpg" alt=""></li>
<li><img src="../javascript/images/beijing/3.jpg" alt=""></li>
<li><img src="../javascript/images/beijing/4.jpg" alt=""></li>
</ul>
<a href="javascript:;" class="leftbtn" id='leftbtn'></a>
<a href="javascript:;" class="rightbtn" id='rightbtn'></a>
</div>
<script>
var leftbtn = document.getElementById('leftbtn');
var rightbtn = document.getElementById('rightbtn');
var list = document.getElementById('list');
// 克隆第一张图片
var cloneli = list.firstElementChild.cloneNode(true);
list.appendChild(cloneli);
// 当前的ul显示到第几张了,从0开始数
var idx = 0;
// 节流锁
var lock=true;
// 右按钮监听
rightbtn.onclick = function () {
// 判断锁的状态
if(!lock)return;
lock=false;
// 给list加过渡,为什么要加??css中不是已经加了嘛?因为最后一张图片会把过渡去掉
list.style.transition = 'left .5s ease 0s'
idx++;
if (idx > 4) {
// 设置一个延时器,延时器的功能就是将ul瞬间拉回0的位置,延时器的目的就是让过渡动画结束以后拉回去
setTimeout(function () {
// 取消掉过渡,因为要的是瞬间移动,不是"咕噜"回去
list.style.transition = 'none';
list.style.left = 0;
idx = 0;
}, 500)
}
list.style.left = -idx * 650 + 'px';
setTimeout(function(){
lock=true;
},500)
}
// 左按钮监听
leftbtn.onclick = function () {
// 判断锁
if (!lock) return
lock=false;
// 判断是不是第0张,如果是,就要瞬间用假的替换真的
if (idx == 0) {
// 取消掉过渡,因为要的是瞬间移动,不是"咕噜"回去
list.style.transition = 'none';
list.style.left = -5 * 650 + 'px';
// 设置一个延时器,这个延时器的延迟时间可以是0毫秒,虽然是0毫秒,但是可以让我们过渡先是瞬间取消,然后再加上
setTimeout(function () {
// 加过渡
list.style.transition = 'left .5s ease 0';
// idx改为真正的最后一张图片
idx = 4;
list.style.left = -idx * 650 + 'px';
}, 0)
} else {
idx--;
list.style.left = -idx * 650 + 'px';
}
// 函数节流
setTimeout(function(){
lock=true;
},500)
}
</script>
他左右按钮都是是-idx啊,向左移动为负数,那为啥右按钮也是-dix?
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星