这个代码可以正常执行,但是当第一次点击右链接时,第一张图片不会滑动到第二张图片,而是瞬间到第二张图片,为什么会这样

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

慕仙1405838

2021-05-08 22:22:07

<!DOCTYPE html>

<html lang="en">


<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>跑马灯轮播图</title>

    <style>

        * {

            margin0;

            padding0;

        }


        .carousel {

            width650px;

            height360px;

            border1px solid black;

            margin50px auto;

            positionrelative;

            overflowhidden;

        }


        .carousel ul {

            list-stylenone;

            width6000px;

            positionrelative;

            transitionleft 2s ease 0s;

        }


        .carousel ul li {

            floatleft;

        }


        .btn {

            width50px;

            height50px;

            border-radius50%;

            background-colororange;

            positionabsolute;

            top50%;

            margin-top-25px;

        }


        .leftbtn {

            left20px;

        }


        .rightbtn {

            right20px;

        }

    </style>

</head>


<body>

    <div class="carousel" id="carousel">

        <ul id="list">

            <li><img src="image/beijing/0.jpg" alt=""></li>

            <li><img src="image/beijing/1.jpg" alt=""></li>

            <li><img src="image/beijing/2.jpg" alt=""></li>

            <li><img src="image/beijing/3.jpg" alt=""></li>

            <li><img src="image/beijing/4.jpg" alt=""></li>

        </ul>

        <!-- 这里必须加javascript:;   因为这里的标签是a,href属性必须加javascript:;防止页面刷新 -->

        <a href="javascript:;" class="leftbtn btn" id="leftbtn"></a>

        <a href="javascript:;" class="rightbtn btn" id="rightbtn"></a>

    </div>

    <script>

        var list = document.getElementById('list');

        var leftbtn = document.getElementById('leftbtn');

        var rightbtn = document.getElementById('rightbtn');

        //克隆第一张图片,必须加true,否则只会克隆li而不会克隆里面的img

        var cloneli = list.firstElementChild.cloneNode(true);

        list.appendChild(cloneli);

        //当前ul显示第几张

        var idx = 0;

        //函数节流,设置节流锁,为真锁就是开着

        var lock=true;

        rightbtn.onclick = function () {

            //最后一张图片会把过渡去掉,所以要重新设上

            list.style.transition = 'left .5s ease 0s';

            //判断锁有没有处于关闭状态,如果关着,就不执行rightbtn.onclick事件所有语句

            if(!lockreturn;

            //下一张图片,

            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'

            //锁开着才能执行上面语句,现在执行完后就把锁关上

            lock=false;

            setTimeout(function(){

                //0.5秒后打开锁

                 lock=true;

            },2000);

        }


        leftbtn.onclick = function () {

            //节流锁

            if(!lockreturn;

            //判断是不是第0张,如果是,就瞬间用假的替换真的

            if (idx == 0) {

                //取消掉过渡,因为要瞬间移动

                list.style.transition = 'none';

                //直接瞬移到假图片上

                list.style.left = -5 * 650 + 'px';

                //设置延时器,延时时间可以是0毫秒,可以让我们过渡先取消,后加上,巧妙设置延时器,可以避免冲突

                setTimeout(function () {

                    list.style.transition = 'left .5s ease 0s';

                    //idx改为最后一张图片的编号

                    idx = 4;

                    list.style.left = -idx * 650 + 'px';

                }, 0);

            } else {

                idx--;

                list.style.left = -idx * 650 + 'px';

            }

            lock=false;

            setTimeout(function(){

                lock=true;

            },2000);

        }




    </script>

</body>


</html>


写回答

1回答

好帮手慕慕子

2021-05-09

同学你好,因为没有给ul设置初始的left属性值,导致第一次无法过渡,所以第一次点击按钮切换图片时没有滑动效果,参考下图设置ul初始的left属性值为0即可,示例:

http://img.mukewang.com/climg/609740d80943154405860365.jpg

祝学习愉快~

0

0 学习 · 15276 问题

查看课程