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});
    });
  • 相关阅读:
    view 的继承关系
    dos 下小tip
    Required diagnostic data collection for RMAN backup
    数据库应用设计设计报告
    程序 从存储卡 内存卡 迁移到 SD卡
    c++ 参赛设置
    c++ 用构造函数
    Ip
    error C3872: “0x3000”: 此字符不允许在标识符中使用
    机器字长 32位与64位的区别
  • 原文地址:https://www.cnblogs.com/l8l8/p/8859000.html
Copyright © 2011-2022 走看看