Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
之前為了幫公司網站插入動畫,稍微接觸了 GSAP 這款動畫函式庫。其中,為了製作「畫底線」的效果,因此使用了虛擬元素,替文字增加了底線,作法如下:
.text-underline {
position: relative;
}
.text-underline::after {
content: "";
position: absolute;
top: 120%;
left: 0px;
width: 0;
border-top: 3px solid rgb(0, 0, 0);
}要做出「畫線」的效果,可以透過將 width: 0; 變成 width: 100%; 達成。
var tl = new TimelineMax();
tl.to(".text-underline::after", {
duration: 0.5,
width:"100%"
} );然而,GSAP 的核心,是無法選取虛擬元素 (pseudo-element) 作為選擇器的。因此上面的 GSAP 語法並不會發生任何改變,必須借助 CSSRulePlugin 來達成。
在引入 CSSRulePlugin 後,就能夠透過 CSSRulePlugin 這個方法,從原本的 CSS 中,取得相對應的選擇器。
為什麼特別強調「從原本的 CSS 中」呢?因為之前在實作時踩過雷,怎麼改就是選不到用來畫線的虛擬元素,後來才發現選擇器沒有做到完全比對。CSSRulePlugin 的概念,是從 CSS 檔案中讀取指定的選擇器並加以操作,一旦選擇器不存在於 CSS 檔案中便無法使用。
var tl = new TimelineMax();
var rule = CSSRulePlugin.getRule(".text-underline::after"); // 必須與 CSS 檔案中的選擇器一致
tl.to( rule, {
duration: 0.5,
cssRule: {
width: "100%"
}
} ); 呈現出來的效果可以參考我的 CodePen。
GSAP 是一款強大的動畫函式庫,我認為在時間軸這一塊,GSAP 的語法還蠻直觀的,所以便開始使用。但也因為它的強大,有些前輩有提到需要考慮效能的問題。