封装缓冲运动函数

html代码 

<!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>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        div{
            width: 100px;
            height: 100px;
            background-color: skyblue;
            position: absolute;
            top: 0;
            left: 10px;
        }
        div.box2{
            top: 210px;
            left: 400px;
        }
        p{
            border: 5px solid tomato;
            height: 300px;
            position: absolute;
            top: 0;
            left: 0;
        }
        p.par2{
            left: 500px;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
    <p class="par1"></p>
    <p class="par2"></p>
</body>
</html>

JS代码

    // 获取标签
    var box1 = document.querySelector('.box1')
    var box2 = document.querySelector('.box2')
    var timing // 定义定时器
    // 设置box1点击事件
    box1.onclick = () => {
        // 调用移动方法,并传递参数
        move(box1,400)
    }
    // box2点击事件
    box2.onclick = () => {
        move(box2,10)
    }
    // 封装运动函数
    function move(ele,end) {
        // 清除定时器,防止多次点击
        clearInterval(timing)
        // 创建定时器
        timing = setInterval(() => {
            // 获取起点位置
            var start = ele.offsetLeft
            // 定义步长,每次移动的距离为剩下距离的1/20
            var speed = (end-start)/10
            // 如果speed使正数则向上取整,负数向下取整
            speed = speed>0 ? Math.ceil(speed) : Math.floor(speed)
            // 做判断,条件满足直接一步到位(如果终点-起点 小于 步长)
            if(Math.abs(end-start) <= Math.abs(speed)) {
                ele.style.left = end + 'px'
                // 条件满足之后需要清除定时器
                clearInterval(timing)
            }else {
                // 如条件不满足则使left增加
                ele.style.left = start + speed + 'px'
            }
        }, 30);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值