封装运动函数最终版

封装运动函数最终版

function animate(ele, obj, duration, callback) {
    // 定义一个固定的时间间隔
    let interval = 20;
    // 知道起点
    let startObj = {};
    for (let i in obj) {
        startObj[i] = parseInt(getComputedStyle(ele)[i]);
    }
    // 知道总次数
    let allCount = duration / interval;
    // 定义变量记录次数
    let count = 0;
    let timer = setInterval(function () {
        count++;
        // 循环改变元素的属性
        for (let i in obj) {
            let result = startObj[i] + (obj[i] - startObj[i]) / allCount * count;
            ele.style[i] = (i.toLowerCase() === "opacity") ? result : (result + "px");
        }
        // 停止
        if (count >= allCount) {
            clearInterval(timer);
            callback && callback(); // 等价于 if (callback) {callback()}
        }
    }, interval)
}

思路:
    1 获取一个元素的起点和终点 计算总距离
    2 获取总时长 获取单次运动间隔 得出总次数
    3 算出步长
    4 开启定时器 让定时器每一次都改变一次元素的属性
     5 累计定时器的执行次数 当超过或者等于总次数的时候 说明到达了目的地 此时清除定时器
    6 执行回调函数

getComputedStyle是window全局对象的一个方法,可以传递两个参数。
第一个参数指定一个用来获取计算样式的DOM元素,
第二个参数(可选)指定一个要匹配的伪元素的字符串,普通元素可省略或传null。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值