TimelineMax:Tweening簡介
在以前,動畫Tweening是描述一幀一幀序列的術語,有時候也被稱為 in-between
。放置在一個運動結束,要進行下一個運動前,中間創建一個流暢的過渡。年紀比較大的同學可能會記得Flash;這個應用程序在引用幀移動時使用了這個術語。我們先來仔細觀察幾個示例。
TweenMax創建的Tweening
在本教程的兩個示例中,我都加載了 TweenMax.min.js ,以獲取 TimelineMax
,以及所有 GSAP 提供的核心工具。回想一下這系列教程的TimelineMax入門篇,我說到的加載 TweenMax.min.js
是因為這比較方便,只加載一個文件就可以包含所有我們需要的東西(這也是GreenSock一直推薦的)。
TweenMax 擴展了 TweenLite ,加入了許多有用的(但非必須)功能,如 repeat()
、 repeatDelay()
、 yoyo()
、 updateTo()
等等。TweenMax是為了方便而創建的,提供了一個單獨的javascript文件,包含了所有你需要的用于操縱DOM元素的內容。它還允許作者們去制定單個動作,而 TimelineMax 將接受鏈式方法來創建一組更復雜的補間/序列。
loader序列
loader就是當用戶在等待某個進程/程序加載的過程中播放的對象。這里我們可以去探索小個的、微小尺寸的元素,使得它們可以有復雜的甚至簡單的互動,它們都可以做到。
快速瀏覽一下下面的這個“珍珠串”示例:
我們把序列打散,便于理解這一整個補間動畫的工作原理。
為了創建這個序列,我們需要使用 staggerTo 方法。如果你想不起這個方法是什么,我建議你就此打住,先看看我的上一篇教程。
根據GreenSock文檔, staggerTo()
方法:
“tweens an array of targets to a common set of destination values.
</div>在這里這組對象指的是SVG標簽內的所有圓。
staggerTo
的第一個參數接受的是我們圓的選擇器(在這里,circle
)。- 第二個參數是Tweening動畫的持續時間(整個動畫的持續時間)。
- 第三個參數是包含補間動畫屬性配置的對象字面量。
- 最后一個參數用于保存我們的
stagger
值(每個對象各自的動畫開始之間的時間)。
</ul>
也就是說,假設 circles
元素包含了三個對象:
timeline.staggerTo(circles, 15, {x:0}, 0.2)// circle 1 在0s開始 // circle 2 在0.2s開始 // circle 3 在0.4s開始 </pre>
loader設置
在開始前,我們需要定義一個新的時間軸,以及設置一些配置。
var loader = new TimelineMax({ repeat: -1, yoyo: true }), circles = $('svg circle'), stagger_options = { opacity: 0, y: -800, ease: Elastic.easeInOut };為了使得這個時間軸在相反的方向重復,我使用了
yoyo
,并把它的值設置為true
。所以,這可以使得我們的動畫在到達最后一幀之后,就反向再次播放。觸發動畫需要先獲取SVG中的每個圓,這也是為什么我們需要jQuery幫助來引用對象。文檔中指出了很多傳遞選擇器的方法(可以點擊 這里 閱讀更多相關內容)。在這里我使用了jQuery的典型選擇器語法來選中所有的圓。這里把我們的引用保存在一個對象中,方便后邊重用,因此
circles = $('svg circle')
。
stagger_options
變量是一個對象字面量,包含了所有讓這個動畫動起來的屬性。我們使用y
來移動對象,因為GSAP CSSPlugin 智能地把transform
值轉換成等價matrix
,最終為我們提升了速度。還有一列transform
屬性簡寫的列表,,相比CSStransform
更優越也更容易使用:GSAP對應CSS屬性
CSS | GSAP | </tr> </thead>|||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
translateX() |
x |
</tr>
|||||||||||||||||||||||||
translateY() |
y |
</tr>
|||||||||||||||||||||||||
translateZ() |
z |
</tr>
|||||||||||||||||||||||||
rotate() |
rotation |
</tr>
|||||||||||||||||||||||||
rotateY() |
rotationY |
</tr>
|||||||||||||||||||||||||
rotateX() |
rotationX |
</tr>
|||||||||||||||||||||||||
scaleX() |
scaleX |
</tr>
|||||||||||||||||||||||||
scaleY() |
scaleY |
</tr>
|||||||||||||||||||||||||
skewX() |
skewX |
</tr>
|||||||||||||||||||||||||
skewY() |
skewY |
</tr>
</tbody>
</table>