码迷,mamicode.com
首页 > 其他好文 > 详细

stratMove方法

时间:2018-04-16 23:53:59      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:span   getc   move   表示   json   class   style   for   time   

/*
 * 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 );
}

 

stratMove方法

标签:span   getc   move   表示   json   class   style   for   time   

原文地址:https://www.cnblogs.com/l8l8/p/8859000.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!