繼續上篇css
這個算是上篇末尾的一點小改進,單獨拿出來講,由於這種效果用的場景不少,關鍵還簡單,先看示意圖。html
<svg width="800" height="600" >
<style>
@keyframes animate{
0% {transform: translateX(0)}
100% {transform: translateX(800px)}
}
#scan{animation:animate 4s ease alternate infinite}
text{mask:url(#shade);text-anchor:middle;}
</style>
<mask id="shade"><circle cx="-40" cy="130" r="40" fill="#ffffff" id="scan"/></mask>
<text x="400" y="150">Vincent Willem Van Gogh</text>
</svg>複製代碼
此次,我把文本應用蒙版寫到了css裏mask:url(#shade) 效果是同樣的。瀏覽器
<radialGradient id="glow" fx="50%" fy="50%" cx="50%" cy="50%" r="50%">
<stop offset="80%" stop-opacity="0"/>
<stop offset="80%" stop-color="#ffd800" stop-opacity="0.8"/>
<stop offset="100%" stop-color="#ffd800" stop-opacity="0" />
</radialGradient>複製代碼
也能實現外發光,但邊緣實在太過鋸齒化,因此變通一下,把一個實色的圓形放到一個漸變的圓形上了。
這裏沒有其餘須要注意的了,主要把形狀的上下順序理清楚就行,我用代碼解釋一下:bash
<rect x="0" y="0" width="800" height="400"/><!--黑色矩形底色-->
<g id="scan"><!--移動的外發光&變亮底色的圓形-->
<circle cx="-40" cy="130" r="55" fill="url(#glow)" />
<circle cx="-40" cy="130" r="40" fill="#322518" />
</g>
<text x="400" y="150">Vincent Willem Van Gogh</text><!--應用了蒙版的文本-->複製代碼
瀏覽器先渲染黑色背景,而後依次是移動的圓形發光區,最後是同步顯示文本。
svg
@keyframes animate{
0%{transform: translateX(0)}
100%{transform: translateX(700px)}
}
#scan{animation:animate 4s steps(7, start)}複製代碼
解釋起來很簡單,就是整個動畫我分紅7段,不要補間動畫效果。函數
使用變形動畫後的蒙版基本就是獨步天下無人能擋了,只說一個簡單的應用,來看一下到底有多強大。我想作一個角度逐漸增大的扇形。咱們知道,circle並無容許隨便定義角度生成任意的扇形,固然了,你能夠設置三個點,一個是固定的圓心,一個是位於圓周的固定的起點,而後另一點沿圓周運動,再把兩個直線和一段變量圓弧相連,我就問你麻煩不麻煩?!並且對於UI設計師來講,沒有函數基礎,怎麼搞,怎麼搞。
讓蒙版來搞啊。我先用AI作一個漂亮的圓形底圖,想怎麼漂亮就怎麼漂亮,想多複雜就多複雜。像下面這種:動畫
@keyframes deform{
0% {d:path('M400,300L650,300L650,300z')} /*變形前的三角形兩個點重合*/
100% {d:path('M400,300L400,50L600,300z')}
}
#animate{animation:deform 2s;fill:#FFFFFF}複製代碼
看看這1/4扇形的效果url
上面那個咔吧咔吧逐漸顯示扇形的動畫效果,再換種思路,此次要實現旋轉蒙版和時間的雙重魔術。spa
<style>
@keyframes rotate{
0% {fill:#FFFFFF;transform:rotate(0deg);transform-origin:400px 300px}
100% {fill:#FFFFFF;transform:rotate(-360deg);transform-origin:400px 300px}
}/*定義旋轉動畫*/
#animate{animation:rotate 2s linear ;fill:#FFFFFF}
@keyframes fix{
50% {fill:#000000;transform:translateY(0)}
100% {fill:#ffffff;transform:translateY(-300px)}
}/*定義跳轉動畫*/
#animate2{animation:fix 2s step-start;}
</style>
<rect x="0" y="0" width="800" height="600"/>
<mask id="shade">
<rect x="0" y="300" width="800" height="300" id="animate"/><!--先繪製白色旋轉蒙版-->
<rect x="0" y="300" width="800" height="300" id="animate2"/><!--再繪製黑變白&下變上蒙版-->
</mask>
<g mask="url(#shade)">…若干底圖圓形代碼…</g>複製代碼
就獲得了下面這種絲滑無比的扇形掃描效果
設計
下面這個案例是想告訴設計師,你在AI(或ps)裏怎麼用蒙版,就能夠把思路原樣複製到咱們的動畫效果裏來。好比UI設計師最愛用的布爾運算,就能夠轉換成有趣的動畫。
SVG蒙版動畫暫且告一段落,有其餘簡單易用有趣的效果,再更新。