animate用法 js原生_如何用js自己实现Animate运动函数

本文介绍了JavaScript实现动画效果的基本原理,通过改变元素属性值来实现运动。讲解了匀速和非匀速两种运动算法,并提供了相应的代码示例。文章还详细阐述了Animate运动类的设计,包括start方法、step方法和update方法的实现,以及如何在HTML中应用这些动画效果。
摘要由CSDN通过智能技术生成

js运动是我们学习js必不可少的研究部分,首先我们要知道js的运动其实仅仅是不断改变元素的某个属性值而已,比如不断改变一个绝对定位div的left值,那么你看到的效果就是这个div不断的向右边运动,那么运动的原理就是这样。

我们知道从a这一点到b这一点我们的运动方式有很多,

1.比如匀速运动到这一点

2.比如先快后慢,

3.必须先慢后快等等

所以我们的运动算法也有很多,那么下面我就图解一下如何写我们自己的运动算法

先看匀速算法

于是我们可以用js写出这段代码

/** 运动算法

* t:动画已经消耗的时间

* b:小球初始位置

* c:小球的需要移动额距离

* 动画持续的总时间

**/

var tween ={

linear:function(t, b, c, d){return c * t / d +b;

}

}

然后我们看看非匀速运动

我们用代码写出来

var tween = {

strongEaseOut:function( t, b, c, d){

return t * t *c / (d *d) + b;

},

}

我们现在只是介绍两种不同的运动算法,当然运动算法还要很多,我们不意义例举,我们接着看如何写改变属性的js

首先我们定义一个运动类

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的原型上定义一个start方法,该方法表示运动开始

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(){

//如果self返回false,则取消定时器

if( self.step()=== false ) {

clearInterval( timeId )

}

},19)

}

上面的setInterval每隔19毫秒就会执行一次,每次都是执行step方法,step方法就是每次需要计算更新小球的位置

Animate.prototype.step = function(){

//目前的时间

var t = +new Date;

//如果时间超过开始时间和需要时间之和,则矫正目前的位置为目标位置

if( t >= this.startTime + this.duration ) {

this.update( this.endPos )

return false;//返回false为了取消定时器

}

//计算小球的位置

var pos = this.easing( t - this.startTime, this.startPos, this.endPos-this.startPos ,this.duration)

//更新div的属性

this.update( pos )

}

那么update方法也仅仅就是更新div的属性而已

//更新当前位置

Animate.prototype.update = function( pos ){

this.dom.style[ this.propertyName ] = pos + 'px'

}

接下来我们看看我们在html里面如何执行,html代码

然后是执行代码

var div = document.getElementById('div')

var animate = new Animate( div )

animate.start('left',500,5000,'linear')

到现在我们整个运动就结束了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值