動畫
Naboo 是一個前端動畫解決方案,包含動畫調(diào)度機(jī)制和動畫工具集,支持串并行動畫及回調(diào),支持自定義插件;
1. 聲明
可以在類和實(shí)例中根據(jù)場景進(jìn)行挑選使用
var util = require('util'); // 類對象 var Naboo = util.naboo; // 實(shí)例對象 var naboo = new util.naboo(); naboo.animate(...);
2. 使用
1) naboo.animate(dom, prop, opt)
描述:animate插件,專門用于進(jìn)行動畫操作的插件
參數(shù)列表:
參數(shù) | 類型 | 必選 | 描述 |
---|---|---|---|
dom | Object | 是 | 需要進(jìn)行動畫的dom元素 |
prop | Object | 是 | 需要進(jìn)行動畫π的css屬性鍵值對對象 |
opt | Object | 否 | 可選的動畫參數(shù)對象 |
opt.duration | number | 否 | 動畫時長,默認(rèn)值400,單位ms |
opt.ease | string | 否 | 動畫的緩動函數(shù)名,默認(rèn)值ease,可選值包括ease、linear、ease-in、ease-out、ease-in-out |
opt.delay | number | 否 | 動畫延遲執(zhí)行的時間,默認(rèn)值0,單位ms |
opt.cb | Function | 否 | 動畫完成后的回調(diào)函數(shù) |
opt.mode | string | 否 | 動畫的模式,默認(rèn)值transition,可選值包括transition、keyframes(暫未支持)、js(暫未支持) |
- 代碼示例
naboo.animate(dom, { 'transform': 'translateX(200px)' }, { duration: 2000, ease: 'ease', delay: 1000, mode: 'transition', cb: function() { console.log(1); } }).start();
2) naboo.start(fn)
描述:開始執(zhí)行動畫的指令函數(shù)
參數(shù)列表:
參數(shù) | 類型 | 必選 | 描述 |
---|---|---|---|
fn | Function | 否 | 動畫完成后的回調(diào)函數(shù) |
使用示例:
naboo.animate(dom, { 'transform': 'translateX(200px)' }, { duration: 2000 }).start();
3) naboo.next()
描述:讓動畫進(jìn)入下一步的指令函數(shù),在調(diào)用 done 或者 register(注冊插件)方法需要調(diào)用 next() 才能進(jìn)入下一個動畫;
參數(shù)列表:無
使用示例:
naboo.animate(dom, { 'transform': 'translateX(200px)' }, { duration: 2000 }).done(function(next) { console.log(1); next(); });
4) naboo.cancel()
描述:取消動畫的指令,調(diào)用該函數(shù)后,當(dāng)前未執(zhí)行完的動畫仍會繼續(xù)執(zhí)行完成,后續(xù)的動畫不會執(zhí)行
參數(shù)列表:無
使用示例:
var instance; btnStart.onclick = function () { instance = naboo.animate(dom, { 'transform': 'translateX(200px)' }, { duration: 2000, cb: function() { console.log(1); } }).start(); } btnCancel.onclick = function () { instance.cancel(); }
5) naboo.on(name, fn)
描述:事件綁定,可以通過該函數(shù)綁定自定義事件
參數(shù)列表:
參數(shù) | 類型 | 必選 | 描述 |
---|---|---|---|
name | string | 是 | 事件名 |
fn | Function | 是 | 事件觸發(fā)的方法 |
使用示例:
var handle = function(event) { console.log(event); } btn.onclick = function () { naboo.on("customer", handle); }
6) naboo.off(name, fn)
描述:解除事件綁定
參數(shù)列表:
參數(shù) | 類型 | 必選 | 描述 |
---|---|---|---|
name | string | 否 | 事件名,如果為空則解除所有事件 |
fn | Function | 否 | 事件觸發(fā)的方法,如果為空則解除該name下所有事件 |
使用示例:
var handle = function(event) { console.log(event); } btn.onclick = function () { console.log('解除事件'); naboo.off("customer", handle); }
7) naboo.trigger(name, data)
描述:觸發(fā)事件
參數(shù)列表:
參數(shù) | 類型 | 必選 | 描述 |
---|---|---|---|
name | string | 是 | 事件名,如果為空則解除所有事件 |
data | Object | 否 | 觸發(fā)事件時需要傳遞的數(shù)據(jù) |
使用示例:
btn.onclick = function () { naboo.trigger("customer", { a: 1 }); }
8) naboo.p(list)
描述:Naboo的并行插件,通過該方式可以將多個動畫并發(fā)執(zhí)行,可以通過類或?qū)嵗龑ο筮M(jìn)行調(diào)用
參數(shù)列表:
參數(shù) | 類型 | 必選 | 描述 |
---|---|---|---|
list | array | 是 | 需要并行的naboo對象列表 |
使用示例:
naboo.p( naboo.animate(dom1, { 'transform': 'translateX(200px)' }, { duration: 2000, cb: function() { console.log(1); } }), naboo.animate(dom2, { 'transform': 'translateX(200px)' }, { duration: 3000, cb: function() { console.log(2); } }) ).start();
8) naboo.done(fn)
描述:Naboo的done插件,可用于在任何一個動畫插件后進(jìn)行回調(diào),可以通過類或?qū)嵗龑ο筮M(jìn)行調(diào)用;
注意:需要在該方法中調(diào)用 next() 才能進(jìn)入下一步的動畫,因?yàn)榭紤]到可能會有一些異步行為,如 ajax 請求
參數(shù)列表:
參數(shù) | 類型 | 必選 | 描述 |
---|---|---|---|
fn | function | 是 | 回調(diào)函數(shù) |
使用示例:
naboo.animate(dom1, { 'transform': 'translateX(200px)' }, { duration: 2000, cb: function() { console.log(1); } }).done(function(next) { console.log(2); next(); }).animate(dom2, { 'transform': 'translateX(200px)' }, { duration: 2000, ease: "ease", cb: function() { console.log(3); } }).start();
P.S.: 示例代碼標(biāo)識在dom1的動畫執(zhí)行完成后再執(zhí)行dom2的動畫
3. 類的靜態(tài)方法:Naboo.register(name, fn)
描述:插件注冊函數(shù),如果animate不能滿足需求,亦或是站長需要封裝自己的插件來做到方便調(diào)用,可以通過該方式來進(jìn)行方法注冊;
注意:在實(shí)現(xiàn)register fn時需調(diào)用next()才能執(zhí)行下一個動畫;
參數(shù)列表:
參數(shù) | 類型 | 必選 | 描述 |
---|---|---|---|
fn | function | 是 | 插件函數(shù),用于定義插件的執(zhí)行邏輯 |
使用示例:
Naboo.register('animate', function (next, dom, prop, opt) { opt = opt || {}; var cb = opt.cb; opt.cb = function () { cb && cb(); next(); }; opt.mode = ([ 'transition' ].indexOf(opt.mode) > -1) ? opt.mode : 'transition'; Naboo[opt.mode](dom, prop, opt); });