GreenSock中的TweenMax
自己寫一些常用到的,方便日後查詢
介紹
greenSock 是功能強大的JS動畫涵式庫,官網上有詳細的API說明,此篇先介紹TweenMax的補間動畫使用。
TweenMax()
用來建構TweenMax的函數,可實例化作使用,也可存於變數中使用。
TweenMax(目標, 作用秒數, 作用屬性), 若是使用TweenLite就是TweenLite()。
作用屬性,參數部分介紹
- delay: '延遲時間(s),在此動畫應該開始前計算delay秒數',
- ease: '動畫運行曲線',
- repeat: '重複的次數,不包含第一次',
- yoyo: '(T/F)動畫再重複時,是否會來回執行,而不是從頭開始',
- yoyoEase: '設定repeat,從尾到頭時,動畫的運行曲線,同上 ease屬性',
- paused: '(T/F)為ture,對象在create後就會停止',
- overwrite: '要不要發生覆寫這件事,如果是“none”就是不發生、”all“就是發生'
- onComplete(function): '當動畫結束時,會執行的函式'
- onCompleteParams(Array): '帶入onComplete的參數,用'{self}'可拿到本身 tween實例'
- lazy: '預設true,這是為了解決效能的問題,預設會先讀完所有的動畫後再執行' 參考:https://www.youtube.com/embed/TMHJptqnDpU?vq=hd720
作用屬性給予動畫事件
基本上除了本身事件外,也能傳入數組,設定作用範圍
on__: 作用事件, on___Params: Array 傳遞給on__的參數數組, on___Scope:obj 定義給on___的作用區
- onComplete: 動畫完成結束後回調此函數
- onReverseComplete: 動畫完成後回調慘函數且反向撥放
- onStart: 動畫開始渲染時作用事件
- onUpdate: 動畫發生改變時(每一針)不停觸發
- onOverwrite: fun(被覆蓋的動畫, 覆蓋的動畫, 目標, 屬性數組)
- onRepeat: 動畫每次重複執行時, 執行此事件
- .eventCallback(type: string, callBack: function(), params:[], scope:) 獲取或設定事件(上方所有事件皆可使用), 和傳給此函數的參數
基本動畫結構 TweenMax.__ (與TweenLite通用)
TweenMax.動作(目標: object,秒數: number,作用屬性: object)
- form: 從目標位置而來, 就是動畫設置開始點
- formTo: 設置動畫起始點和結束點
- set: 設置該目標的屬性不用給予時間(可用於不想改變位置但想改變外貌..等等)
官方文件上有介紹使用set做出3D效果, 但在egret上似乎實現不了, 有興趣者可上去看看使用。
- stagger: 可設定一個有間隔的動畫數列,等同於多個TweenMax(TweenMax才能使用)
同樣能使用To/From
- staggerFormTo:設定序列動畫的起點與終點 :
能使用cycle屬性。
cycle(obj): 可自訂使用不同的屬性組, 也可使用function. 亂數..等等, 亦可使用上方的staggerTo/Form..等
- delayedCall: 設定時間(幀數)後調用函數的方法
播放組件
播放組件基本上為:
function(秒數/狀態, 是否保持默認值屬性,若是true在作用期間內會停止函數操作、事件等)
- 播放: play(於第幾秒時間點播放, ..)
- 暫停: pause(跳轉到第幾秒並停止,..)
- 暫停狀態: paused(給予暫停狀態: boolean)
- 重新開始: restart(是否重新開始, ..)
給予true會略過delay屬性
- 倒轉播放: reverse(第幾秒反轉撥放, ..)
所有動畫皆會反轉, ease曲線也是EX: easeIn -> easeOut
reverse(0) 在動畫最後反方向撥放 reverse(-1) 倒數1秒反方向撥放
- 倒轉播放狀態: reversed()
和前者paused()一樣, 可以取得倒轉狀態,設置(true)為反方向
- 直接跳轉到某時間點: seek(跳轉目標秒數,是否阻止事件或回調函數)
不改變狀態(播放/暫停/方向)的形況下直接跳轉到某時間點
阻止事件預設為true。
- 設定速率: timeScale(速率:number)
設定動畫播放速度, 默認為1
和egret中的timeScale一模模一樣樣
動畫屬性調整(無入參時為獲取)
- .duration( value:Number ) 單次動畫持續的時間
- .totalDuration( value:Number ) 全部重複動畫加重複間隔的持續時間
- .time( value:Number ) 當前動畫已用時間
- .totalTime( time:Number, suppressEvents:Boolean ) 全部重複動畫加重複間隔的總時間
- .progress( value:Number, suppressEvents:Boolean ) 進程0~1
- .totalProgress( value:Number, suppressEvents:Boolean ) 總進程0~1
- .delay( value:Number )獲取或者設置動畫的開始延遲秒數
- .invalidate() 刷新開始/結束值,此時如再restart()會以當前位置作為新的開始點
- .isActive() 判斷是否在播放中
- .startTime( value:Number ) / .endTime( value:Number )
- .repeat( value:Number ) 第一次完成後的重複次數
- .repeatDelay( value:Number )
- .yoyo( value:Boolean )獲取或設置補間動畫的yoyo的狀態。
實例屬性(除data和ticker外均僅用於獲取數據)
- data 用於儲存信息
myTween.data={data1:'value1',data2:'value2',} //存取
myTween.data.data1 // 獲得value1
- target 動畫對象
- timeline 父級時間軸對象
- vars 構造器配置對象
- ticker 每當引擎update時這個對象將分配tick事件
官方文件上有詳細介紹記得打開F12
實例方法
- TweenMax.getTweensOf( target:Object, onlyActive:Boolean )獲取目標上所有動畫對象的數組
- TweenMax.getAllTweens( includeTimelines:Boolean ) 獲取所有動畫實例的數組
- .kill( vars:Object, target:Object ) 消滅整個動畫或部分參數。
- TweenMax.killDelayedCallsTo( function:Function ) 移除延遲函數
- TweenMax.killTweensOf( target:Object, vars:Object ) 移除目標所有動畫
- TweenMax.killAll(complete, tweens, delayedCalls, timelines) 全部刪除
- TweenMax.killChildTweensOf( parent:Object, complete:Boolean )刪除目標子元素動畫
- TweenMax.globalTimeScale( value:Number ) 讀取或設置所有動畫全局播放速率
- TweenMax.pauseAll( tweens, delayedCalls, timelines ) 全部暫停
- TweenMax.resumeAll( tweens, delayedCalls, timelines )全部恢復