摘要:在上能看到好多效果驚艷的圖標。現在來看代碼,相信不會再是一頭霧水了也可以用控制的屬性,控制的動畫過程,做成能響應點擊等事件的圖標按鈕。當然能做的遠不止圖標,這里有不少例子。
? ? ? ?? ? ? ? ??? ? ? ? ? ?? ? ? ? ? ? ??? ? ? ? ? ? ??? ? ? ? ??
在 ?loading.io?上能看到好多效果驚艷的loading圖標。它們都是用svg寫成的,寥寥幾行代碼,比img圖片更精細更節省體積,比純dom實現要更靈活和高效。
怎么畫這些圓和方塊?怎么著色?怎么動起來? 先看看svg的基礎知識,然后將上面第一個圖標畫出來。
?
svg有一些預定義的形狀元素:矩形
1 2 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="300" height="300" viewBox="0 0 300 300"> 3 4 5 <line x1="0" y1="0" x2="250" y2="30" /> 6 7 8 <polygon points="5,5 100,100 50,200" /> 9 10 11 <rect x="100" y="100" width="120" height="100" /> 12 13 14 <circle cx="100" cy="50" r="40" stroke="black"/> 15 16 17 <text x="0" y="20" style="font-size:16px;font-weight: bold">Try SVGtext> 18 19 svg>
?
svg元素的樣式可以寫成標簽的屬性,也可以寫在style里面。下面是一些主要的樣式屬性:
svg還支持很多濾鏡效果,能做漸變、陰影、模糊、圖像混合等等。不需要了解那么多,例如要畫幾個彩色圓圈,用circle 配合fill 即可。
注意:transform 默認以svg左上角為基點,而不是圓心或其他中心。左上角是svg坐標系原點。了解transform和坐標系統,可以參考 這里。
?
svg有幾個輔助元素:
對于上面提到的transform基點問題,可以通過嵌套
1 <svg width="80px" height="80px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"> 2 <g transform="translate(20 50)"> 3 <circle cx="0" cy="0" r="7" fill="#e15b64" transform="scale(0.99275 0.99275)" /> 4 g> 5 <g transform="translate(40 50)"> 6 <circle cx="0" cy="0" r="7" fill="#f47e60" transform="scale(0.773605 0.773605)" /> 7 g> 8 <g transform="translate(60 50)"> 9 <circle cx="0" cy="0" r="7" fill="#f8b26a" transform="scale(0.42525 0.42525)" /> 10 g> 11 <g transform="translate(80 50)"> 12 <circle cx="0" cy="0" r="7" fill="#abbd81" transform="scale(0.113418 0.113418)" /> 13 g> 14 svg>
?
svg的動畫效果是基于動畫標簽元素實現的:
svg的寫法很靈活,樣式可以寫成標簽屬性也可以寫在style里面,動畫標簽可以通過xlink指定元素,也可以寫在動畫元素的內部。如下演示animateTransform的xlink寫法:
上例的動畫是A到B的過渡,要形成順暢的循環,至少要定義三個關鍵點。animateTransform支持更多更靈活的屬性設置:
discrete
?|?linear
?|?paced
?|?spline
? 對svg動畫的更詳細介紹,參考 這里 。
五、代碼實例
? ? ?
circle畫圓,fill著色,用g標簽包裹并定位,transform設置初始形變,animateTransform設置動畫。現在來看代碼,相信不會再是一頭霧水了:
?
也可以用js控制svg的屬性,控制svg的動畫過程,做成能響應點擊等事件的圖標按鈕。當然svg能做的遠不止圖標,這里有不少例子。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/2006.html
摘要:作者通常我們用繪制的都是二維平面圖,但有時也需要繪制三維場景圖,比如像下面這樣的這些圖怎么做出來呢今天就來分享下如何一步步繪制出三維矢量圖。八面體我們先以下面這個八面體為例。 showImg(https://segmentfault.com/img/remote/1460000019800947); 作者 | Jay Alammar 通常我們用 Python 繪制的都是二維平面圖,但有...
摘要:非常的龐大,而且它是完全為設計而生的動效庫。它運行于純粹的之上,是目前最強健的動畫資源庫之一。可能是創建滾動特效最好用的工具,它支持大量的瀏覽器,只要它們支持和特性。可以通過安裝吊炸天了,接近現實生活中的物理運動碰撞慣性動畫庫。 收集日期為2019-02-28,★代表當時的該項目在github的star數量 Animate.css 56401 ★ 一個跨瀏覽器的動效基礎庫,是許多基礎動...
摘要:層疊即表示允許以多種方式來描述樣式,一個元素可以被渲染呈現出多種樣式。可以讓屬性的變化過程持續一段時間,而不是立即生效。比如,將元素的顏色從白色改為黑色,通常這個改變是立即生效的,使用后,將按一個曲線速率變化。 showImg(https://segmentfault.com/img/bVZwyL?w=900&h=385); CSS 的全稱是 Cascading Style Sheet...
閱讀 3042·2021-09-03 10:33
閱讀 1268·2019-08-30 15:53
閱讀 2617·2019-08-30 15:45
閱讀 3378·2019-08-30 14:11
閱讀 526·2019-08-30 13:55
閱讀 2580·2019-08-29 15:24
閱讀 1904·2019-08-26 18:26
閱讀 3557·2019-08-26 13:41