美文网首页
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