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 屬性簡寫的列表,,相比CSS transform 更優越也更容易使用:
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>