轮播图第一步-运动函数的封装

function move(element, obj, callback = function () { }) {
    let num = 0;
    // 定义一个变量存储定时器的个数
    // 初始值是0
    for (let type in obj) {
        // 循环遍历这个对象
        // 使用let定义变量每一个循环中变量存储独立的属性 不会被覆盖
        // 每次循环触发生成一个定时器 操作对应的属性和属性值
        num++;
        // 对象循环一次,证明对象中有一对属性和属性值
        // 也就是一个定时器需要改变属性属性值
        // 此时num+1
        let startVal = type === 'opacity' ? window.getComputedStyle(element)[type] * 100 : parseInt(window.getComputedStyle(element)[type]);
        //    获取初始值并且兼容透明度
        let endVal = type === 'opacity' ? obj[type] * 100 : obj[type];
        //    获取最终值并且兼容透明度

        // 用time来记录定时器变化
        let time = setInterval(function () {
            // 定义步长
            let step = endVal - startVal;
            step = step > 0 ? Math.ceil(step) : Math.floor(step);
            // 当步长大于0 时向上取整 小于0时,向下取整
            startVal += step;
            //对象的属性的变化值
            element.style[type] = type === 'opacity' ? startVal / 100 : startVal + 'px';
            if (startVal === endVal) {
             
                clearInterval(time);
                // 清除定时器也就是运动终止时
                num--;
                // 每清除一个定时器num-1;
                if (num === 0) {
                    // 当num的值累加至0时,表示所有的定时器都清除了
                    // 此时使用回调函数
                    callback();
                }
            }
        }, 30)
    }

}

在这里一定要注意异步池的概念哦!关于异步池的知识点,后面会给大家补充,大家在这里只需要知道是先执行for...in循环,异步池中的内容不会执行,等到for...in执行完毕后,再执行异步池的内容

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值