Fadingvision / blackLearning.github.io

博客和学习记录
24 stars 1 forks source link

关于参考anime.js实现一个js动画库的一些学习和思考 #7

Open Fadingvision opened 7 years ago

Fadingvision commented 7 years ago

motion.js

能够学到什么?

  1. 要实现什么东西,解决什么问题,解决问题的思路,多看别人是怎么实现的,有哪些是值得借鉴和学习的地方。 2。 怎么从解决的问题入手,然后思考api怎么设计, 哪些是暴露出去的,哪些是内部实现的。思考整个代码的结构,用哪些方法来实现这个api,整个项目的代码的生命周期是怎样的。 3。 怎么把思路转化为实际的代码,代码的组织封装,设计模式,代码抽象模块化,具体的优化细节。 4。 优化。

具体到这个项目

1. 实现什么,解决什么问题?

2. 思路:

怎么实现: dom 动画的本质是什么? JS_DOM动画的实现原理?怎么让一个元素动起来。 学习和借鉴velocity.js , anime.js

3. API设计和实现

4. 具体代码编写

  1. 策略模式来实现easing-function,缓动函数。
  2. 迭代器模式来实现动画数组进行迭代,可以同时进行多个动画的循环进行。
  3. 发布-订阅者模式可以实现动画回调,通知动画队列的作用。
  4. 命令模式可以用来实现动画队列。

5. 优化和测试

(version: 0.1.0)

(知识体系: EventEmitter, Promise, queue, generator等) (设计模式:迭代器模式、外观模式、策略模式、命令模式等)

API


1.主函数

motion(target, properties, options);

explain:

  1. duration: number; (wait: function)
  2. delay: number;(wait: function)
  3. easing: string;(wait: function)
  4. loop: number;(可以重複動畫多少次)
  5. direction: 'reverse';(从后往前播放动画)
  6. autoPlay: false, (是否自动执行动画)

7: callbacks:

begin: (动画开始的时候执行) run: (动画每帧的时候执行一次) done: (动画结束的时候执行一次)

动画队列: sequence (参考jquery的queue或者ES6的generator)

var mySequence = motion.sequence({
    diretion: ',',
    loop: 3,
    autoPlay: false,
})

mySequence.add({

}}

play, pause, restart

var playPauseAnim = motion('div',{
    translateX: 250,
}, {
  direction: 'alternate',
  loop: true,
  autoPlay: false // prevent the instance from playing
});

playPauseAnim.play(); //  Manually play
playPauseAnim.pause(); //  Manually pause
playPauseAnim.finish(); //  Manually finish
playPauseAnim.restart(); // Restart the animation and reset the loop count / current direction
playPauseAnim.reverse(); // Change the animation direction

playPauseAnim.finished : //  returns a Promise object which will resolve once the animation has finished running.

easing Functions

Penner's equations:

easeIn easeOut easeInOut
easeInQuad easeOutQuad easeInOutQuad
easeInCubic easeOutCubic easeInOutCubic
easeInQuart easeOutQuart easeInOutQuart
easeInQuint easeOutQuint easeInOutQuint
easeInSine easeOutSine easeInOutSine
easeInExpo easeOutExpo easeInOutExpo
easeInCirc easeOutCirc easeInOutCirc
easeInBack easeOutBack easeInOutBack
easeInElastic easeOutElastic easeInOutElastic

anime.js学习分析

结构分析

Default Config

默认配置(实例,缓动函数,可以作为动画属性的transform属性)

Util工具函數

获取运动元素的value值

getOriginalTargetValue => {
    case getAnimationType():
        css: return getCssValue()
        transform: return getTransformValue()
        attribute: return getAttribute()
}

获取运动元素的所有课进行动画的属性

获取运动元素的路径

获取运动元素

normalizeTweens()该函数将所有的参数解析成一个运动对象配置。

创建实例

createNewInstance(params) => return config object;

CORE MODULE

动画引擎engine

用于定义requestAnimationFrame来真正的形成动画效果。

动画实例函数对象

动画引擎所需知识点

1. 准确的获取元素的样式(包含普通样式,transform样式,颜色rgb值)

2. 熟悉常用的缓动函数(easeIn, easeOut, easeInOut, linear;)

3. API设计

4. requestAnimationFrame

5. css3的一些动画知识