JQuery模块分析及其实现第六部分动画部分功能及实现,接第五部分!
动画原理
- 根据人眼具有
0.1
秒的视觉残留,只有在一秒切换至少24
个画面就会产生动画
动画的基本结构
1 | function animate() { |
小动画案例
- 奔跑的小矩形
1 | <html lang="en"> |
匀速直线动画
- 固定时间
- 固定距离
- 如何判断动画结束的时机?
- 使用时间来判断是否结束动画
- 如果动画时间到达指定时间,那么就结束动画,并让动画元素到达终点
- 实现思路
- 定义动画函数,
animate
函数. 当调用animate
函数时, 即动画开始的时间 - 定义
render
函数. 用来给动画元素设置属性值- 计算当前动画元素所在的位置, 然后累计到其对应属性值上.
- 首先计算动画的时间间隔
- 如果时间间隔大于或等于指定的总时间, 那么就停止动画并设置动画元素到达终点
- 否则, 根据速度, 动画时间间隔计算出位移. 再将其于起始位置累加后赋值给
elem
- 定义定时器, 开始动画.
- 定义动画函数,
1 | var animate = function(elem, target, duration) { |
匀减速直线动画
- 物理公式
- a: 加速度
- t: 时间间隔
- v0: 初始速度
- vt: 末速度
- S: 位移
- 正方向: S = v0 * t + a + t * t / 2;
- S ==> target - location
t ==> duration
v0 = 0 - 正方向
a = 2 * ( S - v0 * t) / ( t * t)
==> = 2 * S / ( t * t)
==> = 2 * ( target - location ) / ( duration * duration )
vt = 2 * ( target - location ) / duration - time 时间间隔内的 匀减速位移
tween = v0 * t - a * t * t / 2
==> tween = 2 * ( target - location ) * time / duration
- (target - location ) * time * time / ( duration * duration )
1 | var animate = function(elem, target, duration) { |
使用对象封装缓动函数
1 | /* |
抽取缓动函数
将缓动函数的可变变量抽取出来,以便于封装
1 | var animate = function(elem, target, duration, easingName) { |
多属性动画的实现
到此我们就可以继续进行框架的封装了
1 | // 获取所有动画属性的起始值 |
实现animate和stop方法
1 | itcast.fn.extend({ |
1 |
|