SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

泱泱發表於2018-03-22

這是從2018“草莓音樂節”的宣傳視訊得到的靈感,海報的主題是錯位拼貼分割重組,對我這種設計渣渣而言,看中的是其平面化,也就是說,用SVG+CSS3動畫完全可以玩轉。因為只涉及一些基礎元素的位移、縮放構成的轉場效果,相對來說比較簡單,但創意很開腦洞。因為宣傳視訊比較長,所以把它分割成了幾個部分,依次來完成。

SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

首先放上一張靜態圖,來分析動效。一共涉及三種動效,位移,旋轉,漸隱漸現。

當把元素分析完成後,現在就要在AI中進行相應的分層,便於SVG程式碼的解讀。在AI中,對應各個部分,放置到不同的圖層中,每個圖層做好命名,依次為底圖base、向上移動moveUp、向下移動moveDown、中間大圓baceCenter、中間小圓centerCircle、周圍圓點dot。因為涉及Y軸方向的位移動畫,所以在底圖的繪製時,需要移動的部分要超出畫板。

CSS3部分相對來說比較簡單,旋轉動畫transform:rotate(),位移動畫transform:translateY(),因為小圓點只是裝飾作用,所以只設計了兩種型別的透明度的改變,任意分成了兩組。

@keyframes centerCircle{0%{transform:rotate(0deg);
transform-origin:center center
}100%{transform:rotate(-360deg);
transform-origin:center center
}
} #centerCircle{animation:centerCircle linear 4s infinite ;

} /*中心旋轉圓設定*/@keyframes moveUp{0% {transform: translateY(0)
}100% {transform: translateY(-70px)
}
}#moveUp {animation:moveUp linear 4s infinite alternate;

} /*向上移動*/@keyframes moveDown{0% {transform: translateY(0)
}100% {transform: translateY(70px)
}
}#moveDown {animation:moveDown linear 4s infinite alternate;

} /*向下移動*/@keyframes dot1{0%{opacity:0
}100%{opacity:1
}
}#dot1{animation:dot1 ease 2s infinite alternate
}/*漸隱漸現小圓點樣式1*/@keyframes dot2{0%{opacity:0.7
}70%{opacity:0
}100%{opacity:0.3
}
}#dot2{animation:dot2 ease 2s infinite alternate
}/*漸隱漸現小圓點樣式2*/複製程式碼

先跑起來看看效果,大塊的色塊,濃郁的色彩,似乎還不錯。

SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

go on。接下來如圖:

SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

三個圓從中心依次出現放大,這是一個基礎的縮放動效transform:scale()。這裡就要用到控制SVG描邊屬性縮放文章中提到的描邊屬性不受縮放控制的神句了,三個圓的描邊屬性後面都要加上vector-effect:non-scaling-stroke,由於出現的順序不同,又要疊加其他動畫,為了避免自己搞不清各部分動畫的時間次序(畢竟不是AE,時間軸不直觀),所以繪製了一個簡單的時間軸。

SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

動畫屬性定義中,只要開始的時間依次設定好久可以了,另外關於縮放的倍數,由於從無到有,初始值一定是scale(0),結束的值和定義的圓的半徑有關,可以多調整幾個值,得到最滿意的效果。

@keyframes purpleCircle{0% {transform:scale(0);
transform-origin:center center
}100% {transform:scale(1.5);
transform-origin:center center
}
}#purpleCircle{animation:purpleCircle linear 1.5s 1s both
} /*最大圓 1S後開始擴大*/@keyframes whiteCircle{0% {transform:scale(0);
transform-origin:center center
}100% {transform:scale(2);
transform-origin:center center
}
}#whiteCircle{animation:whiteCircle linear 1.5s 1.5s both
} /*中間圓 1.5S後開始擴大*/@keyframes blueCircle{0% {transform:scale(0);
transform-origin:center center
}100% {transform:scale(1);
transform-origin:center center
}
}#blueCircle{animation:blueCircle linear 1.5s 2s both
} /*最小圓 2S後開始擴大*/複製程式碼

合成後效果如下:

SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

go on……

SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

如上圖所示,當白色圓擴充套件到整個畫布後,中間出現兩個三角,三角的變形動畫如下:

SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

為了方便定義屬性,我以三角形斷開時的形狀為基準,因為第一步是Y軸向的縮放,X軸不變,所以僅定義transform:scaleY(),而在第二步變形中,X軸向與Y軸向縮放時不同步的,因此要分開寫成transform:scaleX()scaleY()。為了確保第一步統一的變形效果,要先把兩個三角都放在一個組中,給這個組進行變形動畫。

<
g id="triangle">
<
polygon id="triLeft" points=""/>
<
!--左側三角-->
<
polygon id="triRight" points=""/>
<
!--右側三角-->
<
/g>
複製程式碼

動畫屬性中需要注意的是transform-origin變形基點的定義。當兩個三角斷開後,基點對應如下:

SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫
@keyframes triangle{0% {transform:scaleY(0);
transform-origin:
}100%{transform:scaleY(1);
transform-origin:
} /*變形的基點為交點座標*/
} #triangle{animation:triangle linear 0.5s 2.5s both
} /*兩個三角形Y軸向擴大*/@keyframes triLeft{0% {transform:scaleY(1)scaleX(1);
transform-origin:
} /*變形的基點為左側邊中點座標*/100%{transform:scaleY(0.15)scaleX(0.05);
transform-origin:
}
} #triLeft{animation:triLeft linear 0.5s 3s both
} /*左側三角形向左水平縮小*/@keyframes triRight{0% {transform:scaleY(1)scaleX(1);
transform-origin:
} /*變形的基點為右側邊中點座標*/100%{transform:scaleY(0.6)scaleX(0.5);
transform-origin:
}
} #triRight{animation:triRight linear 0.5s 3s both
} /*右側三角形向右水平縮小*/複製程式碼
SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

看下效果,似乎不錯,截止到這一步,第一階段的動畫才算完成,之所以稱作第一階段,是因為這時原底圖可以退出舞臺,全新的下一幕開始了。

SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

這裡右側圓形實現這種效果有點複雜,在SVG剪下蒙版屬性clip-path文章中詳細說明了實現過程。各部分圖形的順序至關重要。

SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

來看下效果

SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

好了,第二部分也正式結束,第三部分相對簡單一些,基本只有透明度的屬性變化。和第一部分底圖的圓點的動效基本相似,無非圖形更復雜一些,就不再贅述,直接放上最終效果吧。

SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

唯一需要說的是左上角類似漸變網格的圓點,使用了運動的漸變蒙版來實現。

SVG+CSS3仿作了2018草莓音樂節的宣傳視訊動畫

首先需要定義一個蒙版的位移動效

@keyframes maskXY{0%{transform:translate(0, 0);

}100%{transform:translate(-70px, -70px);

} /*向左上角位移*/
}#maskXY{animation:maskXY linear 3s 5s both
}
複製程式碼

漸變型別的定義和圖形是AI匯出時生成的,一般不用修改,只是各種定義比較多,別把自己繞進去就行。

<
mask id="maskMove">
<
!--定義漸變蒙版-->
<
g id="maskXY">
<
!--位移動效-->
<
defs>
<
linearGradient id="jianbian" …>
<
stop offset="0" stop-color="#fff"/>
<
stop offset="1"/>
<
/linearGradient>
<
!--定義漸變型別-->
<
/defs>
<
rect x="" y="" width="" height="7" transform="" style="fill: url(#jianbian)"/>
<
!--矩形使用漸變色填充-->
<
/g>
<
/mask>
<
g mask="url(#maskMove)">
<
!--使用漸變模板-->
…漸變網格圓點 <
/g>
複製程式碼

來吧,小結一下,雖然做的過程費了點力氣,純粹的體力活,但做完之後的收穫還是比較大的,這一個案例就又一次突破了認知,比如描邊屬性縮放的控制,比如剪下蒙版屬性的使用,比如深深的體會到看DOM看到眼瞎的感覺。codepen預覽地址SVG+CSS3 animation copy propagandist video of 2018 Strawberry Music Festival,看看完整的效果就好,原始碼那裡亂成毛線,光註釋都能看吐,就不要看了 。草莓音樂節酷酷的宣傳視訊還有其他幾個,不準備做了,下次探討點有趣的東西,就醬。

來源:https://juejin.im/post/5ab05123518825556e5de7d4

相關文章