webAPI

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

2019-05-13  本文已影响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>

上一篇下一篇

猜你喜欢

热点阅读