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');

 


更多专业前端知识,请上 【猿2048】www.mk2048.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值