zoukankan      html  css  js  c++  java
  • stratMove方法

    /*
     * elem: 操作哪一个元素
     * json:表示多个属性
             * attr: 操作的那个元素的css中的什么属性
             * value: 操作的那个元素的css中的那个属性的目标值
     * cb:回调函数,前一个运动执行后,这一段代码才被执行 
     */
    var startMove = (elem, json, cb)=>{
        // 每当执行运动函数的时候,都先把上一次的运动结束掉
        clearInterval(elem.timer);
        // 开启定时器,让elem的attr属性,不断的变化
        elem.timer = setInterval( ()=>{
            // 循环,把json中的每一个属性,都做处理(让json中的每一个属性,都运动起来)
            var flag = true;        //是不是所有的属性,都运动到了目标值
            for( var attr in json ){
                // attr属性的目标值
                var value = json[attr];                //此时的json是一个只有一个元素的对象,如:    left:500;
                                                            //所以value是500
                // 求当前属性值
                var v = getComputedStyle(elem)[attr];   //attr应该是left
                if( attr=="opacity" ){
                    v = Math.round(v*100);
                }else{
                    v = parseInt(v);
                }
                //console.log(v);
                // 求目标值与当前值的间距
                var dist = value-v;
                // 求步长值(注意:缓冲运动中,步长值是逐渐减小的)
                var step = dist/6;
                //console.log(step);
                // 如果属性逐渐变大的运动,那么step最后几次的值类似 0.1,我们希望把0.1变为1
                // 如果属性逐渐变小的运动,那么step最后几次的值类似 -0.1,我们希望把-0.1变为-1
                if( step>0 ){    
                    step = Math.ceil(step);
                }else{
                    step = Math.floor(step);
                }
                // 更新属性值
                //console.log(v, step);
                if( attr=="opacity" ){
                    elem.style[attr] = (v+step)/100;
                }else{
                    elem.style[attr] = (v+step)+'px';
                }
                // 如果到达目标值,运动停止
                //if( v==value ){
                //    clearInterval(elem.timer);
                //}
                if( v!=value ){// 只要有1个属性,没有到达目标值,就让flag等于false
                    flag = false;    
                }
            }    
            // 判断是否所有的属性,都已经到达了目标值
            if( flag ){
                clearInterval(elem.timer);
                if( cb ){    // 如果设置了回调函数,则执行它。不写if的话,当cd没有设置时,会报错
                    cb();
                }
            }
        }, 30 );
    }
    startMove( div1, {"left":100} ,()=>{
        startMove(div1 , {"top" :300});
    });
  • 相关阅读:
    【codecombat】 试玩全攻略 第九关 循环又循环
    【codecombat】 试玩全攻略 第十三关 已知敌人
    【codecombat】 试玩全攻略 第十一关 再次迷宫经历
    【codecombat】 试玩全攻略 第六关 cell commentary
    【codecombat】 试玩全攻略 第八关 火舞
    【codecombat】 试玩全攻略 第十二关 恐惧之门
    【codecombat】 试玩全攻略 第十四关 已知敌人
    苹果apns推送总结
    Xcode 提升速度小技巧
    UITextField 限制输入字数
  • 原文地址:https://www.cnblogs.com/l8l8/p/8859000.html
Copyright © 2011-2022 走看看