美文网首页webAPI
移动动画的封装之三:解决越来越快的问题

移动动画的封装之三:解决越来越快的问题

作者: 椋椋夜色 | 来源:发表于2019-05-13 21:05 被阅读0次

    <!DOCTYPE html>
    <html lang="zh-CN">

    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title> 移动动画的封装之三:解决越来越快的问题 </title>

        <!-- 解决多次点击会越来越快的问题
    
         解决办法:在开启下一个计时器之前,把上一个计时器停止 -->
    
        <style>
            .box {
                width: 100px;
                height: 100px;
                background-color: red;
                position: absolute;
                margin-top: 20px;
            }
    
            #btn {
                display: none;
                float: left;
                margin-right: 5px;
            }
        </style>
    </head>
    
    <body>
        <input type="button" value="回到0" id="btn">
        <input type="button" value="移动到400" id="btn1">
        <input type="button" value="移动到800" id="btn2">
        <div class="box"></div>
    
        <script>
            // 找到元素
            var box = document.querySelector('.box');
            var btn = document.querySelector('#btn');
            //给计时器一个id
            var timerID;
    
            function ben(add) {
                // 先清除上一个计时器
                clearInterval(timerID);
                // 保证不管点多少次,只有一个计时器
                timerID = setInterval(function () {
                    // 获取一下当前位置
                    var box1 = box.offsetLeft;
                    // 要用距离 判断是否大于10,大于就走,不大于就直接到目的地
                    if (Math.abs(add - box1) > 10) {
                        // 当前位置往前走1步(1步为10像素)
                        box1 += add > box1 ? 10 : -10;
                        box.style.left = box1 + "px";
                    } else {
                        //距离不够走一步,就直接到目的地
                        box.style.left = add + "px";
                    }
                    // 如果到了目的地就停止
                    if (add == box1) {
                        clearInterval(timerID);
                    }
                }, 20)
            };
            // 添加点击事件
            document.getElementById('btn').onclick = function () {
    
                btn.style.display = "none";
                ben(0);
            }
    
            document.getElementById('btn1').onclick = function () {
    
                ben(400);
                btn.style.display = "block";
    
            }
            document.getElementById('btn2').onclick = function () {
                ben(800);
                btn.style.display = "block";
            }
        </script>
    

    </body>

    </html>

    相关文章

      网友评论

        本文标题:移动动画的封装之三:解决越来越快的问题

        本文链接:https://www.haomeiwen.com/subject/rjhdaqtx.html