美文网首页
js运动框架

js运动框架

作者: 小雞雞炖蘑菇 | 来源:发表于2017-03-17 12:05 被阅读0次

    一个块的运动前提是让他脱离文档流,在给他定位了之后,手动修改它的top和left值,他就会运动,就是相对他原来的位置而变到你想让他去的地方,这是一个简单的运动,工作中需要封装成一个框架,能够让你随时调用;
    下面来自己封装一个框架
    一个框架需要参数,那咱自己封装的运动框架需要什么参数呢?
    1.目标元素,这个是必须的;
    2.对象的哪些属性需要改变呢,咱就需要给他传个对象json,里面外加一个回掉函数,让你告诉他运动完了后还需要做些什么;
    3.就是运动的参数,时间之类,也需要一个对象;

    function move(obj,json,option){
            clearInterval(obj.timer); //清楚定时器,每次开定时器前先清定时器,这是好习惯
            option = option || {}; //参数初始化,有些参数不是必须传的,不传的时候让他有个默认值,不至于报错
            option.duration = option.duration || 1000; //默认运动时间1s
            option.easing = option.easing || 'linear'; //默认匀速运动
            var start = {};
            var dis = {};
            for(var name in json){
                if(name == 'opacity'){
                    start[name] = Math.round(parseFloat(getStyle(obj,name))*100);
                }else{
                    start[name] = parseInt(getStyle(obj,name));
                }
                dis[name] = json[name] - start[name];
            }
            var count = Math.floor(option.duration/30);
            var n = 0;
            obj.timer = setInterval(function(){
                n++;
                var current = 0;
                for(var name in json){
                    switch(option.easing.toLowerCase()){
                        case 'linear': //匀速运动
                            var a = n/count;
                            current = start[name] + dis[name]*a;
                            break;
                        case 'ease-in': //加速运动
                            var a = n/count;
                            current = start[name] + dis[name]*Math.pow(a,3);
                            break;
                        case 'ease-out': //减速运动
                            var a = 1 - n/count;
                            current = start[name] + dis[name]*(1 - Math.pow(a,3));
                            break;
                    }
                    if(name == 'opacity'){ //透明度需要兼容,切不带单位
                        obj.style.opacity = current/100;
                        obj.style.filter = 'alpha(opacity:'+current+')';
                    }else{
                        obj.style[name] =current + 'px';
                    }
                }
                if(n == count){
                    clearInterval(obj.timer);
                    option.complete && option.complete(); //运动结束回掉函数
                }
            },30);
        }
    

    相关文章

      网友评论

          本文标题:js运动框架

          本文链接:https://www.haomeiwen.com/subject/uhosnttx.html