老师看下左按钮的代码,为什么用延时器拉到最后一张图后不进行换图了 要再点一次才会换图

来源:6-3 编写跑马灯轮播图特效

weixin_慕村1291783

2020-11-04 16:53:34

# 具体遇到的问题

# 报错信息的截图

# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

<!DOCTYPE html><html lang="en">
<head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        * {            margin0;            padding0;        }                ul {            list-stylenone;            width3000px;            positionrelative;            top0;            left0;            transitionall .5s ease 0s;        }                #box {            positionrelative;            width600px;            height300px;            border1px solid #ccc;            margin50px auto;            /* overflow: hidden; */        }                img {            width600px;            height300px;        }                li {            floatleft;        }                #left-btn {            positionabsolute;            top50%;            left20px;            margin-top-25px;            width50px;            height50px;            background-colorrgba(20662620.5);            border-radius50%;        }                #right-btn {            positionabsolute;            top50%;            right20px;            margin-top-25px;            width50px;            height50px;            background-colorrgba(20662620.5);            border-radius50%;        }    </style></head>
<body>    <div id="box">        <ul id="ul">            <li><img src="images/banner01.png" alt=""></li>            <li><img src="images/banner02.png" alt=""></li>            <li><img src="images/banner03.png" alt=""></li>        </ul>        <a href="javascript:;" id="left-btn"></a>        <a href="javascript:;" id="right-btn"></a>    </div>    <script>        var ul = document.getElementById('ul');        var leftBtn = document.getElementById('left-btn');        var rightBtn = document.getElementById('right-btn');        var lf = 0;        var xin = ul.firstElementChild.cloneNode(true);        ul.appendChild(xin);        rightBtn.onclick = function() {            ul.style.transition = 'all .5s ease 0s';            lf += 1;            if (lf > 2) {                setTimeout(function() {                    ul.style.transition = 'none';                    ul.style.left = 0//为什么这一行代码不写 点击后就直接跳第二张图呢,lf=0 不是应该跳第一张图吗                    lf = 0;                }, 500)            }            ul.style.left = -600 * lf + 'px';        }        leftBtn.onclick = function() {            if (lf == 0) {                setTimeout(function() {                    ul.style.transition = 'none';                    ul.style.left = '-1800px';                    lf = 3;                }, 0)            }            ul.style.transition = 'all .5s ease 0s';            lf--;
            ul.style.left = -600 * lf + 'px';        }    </script></body>
</html>

写回答

1回答

好帮手慕久久

2020-11-04

同学你好,问题解答如下:

1. 注释中的问题解答:
由于setTimeout是定时器,它是异步执行的,即下图黄框中的代码会在“ul.style.left = -600 * lf + 'px';”这句代码执行之后再执行:
http://img.mukewang.com/climg/5fa2830909af2a0e11660331.jpg
如果去掉“ul.style.left = 0”这句代码,当lf=3时,会先设置ul的left为-1800px(显示最后一张),然后500ms后,再去掉ul的过渡样式,并把lf置为0,此时ul的left没有设置为0(还是显示最后一张);再次点击按钮后,会执行lf+=1,即lf=1,接下来会执行ul.style.left = -600 * lf + 'px';,所以直接就显示第二张了。
2. 左按钮同理,定时器中的代码,会后执行:
http://img.mukewang.com/climg/5fa284a8099f6de707270379.jpg
即,点击一次左按钮后,ul最终的样式还是left=-1800px,因此没有更换图片。
可做如下更改:
http://img.mukewang.com/climg/5fa285d6098b25c307350475.jpg
祝学习愉快!


0

0 学习 · 15276 问题

查看课程