js实现缓动效果-让div运动起来

Posted 风雨后见彩虹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js实现缓动效果-让div运动起来相关的知识,希望对你有一定的参考价值。

var tween = {
    linear:function(t,b,c,d){
        return c*t/d + b;
    },
    easeIn:function(t,b,c,d){
        return c * ( t /= d ) * t + b;
    },
    strongEaseIn:function(t,b,c,d){
        return c * ( t /= d ) * t * t * t * t + b;
    },
    strongEaseOut:function(t,b,c,d){
        return c * ( ( t = t / d -1 ) * t * t * t * t +1 ) + b;
    },
    sineaseIn:function(t,b,c,d){
        return c * ( t /= d ) * t * t + b;    
    },
    sineaseOut:function(t,b,c,d){
        return c * ( ( t = t / d -1 ) * t * t *t +1 ) + b;
    }
};

var Animate = function(dom){
    this.dom = dom;
    this.startTime = 0;
    this.startPos = 0;
    this.endPos = 0;
    this.propertyName = null;
    this.easing = null;
    this.duration = null;
}

Animate.prototype.start = function(propertyName,endPos,duration,easing){
    this.startTime = +new Date;
    this.startPos = this.dom.getBoundingClientRect()[propertyName];
    this.propertyName = propertyName;
    this.endPos = endPos;
    this.duration = duration;
    this.easing = tween[easing];

    var self = this;
    var timeId = setInterval(function(){
        if(self.step() === false){
            clearInterval(timeId);
        }
    },19);
}

Animate.prototype.step = function(){
    var t = +new Date;
    if(t>=this.startTime + this.duration){
        this.update(this.endPos);
        return false;
    }
    var pos = this.easing(t-this.startTime, this.startPos, this.endPos - this.startPos, this.duration);
    this.update(pos);
}

Animate.prototype.update = function(pos){
    this.dom.style[this.propertyName] = pos + ‘px‘;
}

var div = document.getElementById(‘div‘);
var animate = new Animate(div);
animate.start(‘left‘,500,1000,‘strongEaseOut‘);

 

以上是关于js实现缓动效果-让div运动起来的主要内容,如果未能解决你的问题,请参考以下文章

利用tween.js算法生成缓动效果

镜头以及各种运动的缓动效果

缓动动画

[js高手之路]匀速运动与实例实战(侧边栏,淡入淡出)

tween 缓动动画

animation js控制 缓动效果