首頁 web前端 H5教程 HTML5之SVG 2D入門11—使用者互動性(動畫)介紹及應用_html5教學技巧

HTML5之SVG 2D入門11—使用者互動性(動畫)介紹及應用_html5教學技巧

May 16, 2016 pm 03:50 PM
2d svg 動畫

互動性
SVG擁有良好的使用者互動性,例如:
1. SVG能回應大部分的DOM2事件。
2. SVG能透過cursor良好的捕捉使用者滑鼠的移動。
3. 使用者可以很方便的透過設定svg元素的zoomAndPan屬性的值來實現縮放等效果。
4. 使用者可以很方便的把動畫和事件結合起來,完成一些複雜的效果。
透過給SVG元素掛接事件,我們可以使用腳本語言方便的完成一些互動任務。 SVG支援大部分的DOM2事件,例如:onfocusin, onfocusou, onclick, onmousedown, onmouseup, onmousemove, onmouseout, onload, onresize, onscroll等事件。除了這些,SVG也提供了獨特的動畫相關的事件,例如:onroom,onbegin,onend,onrepeat等。
事件大家比較熟悉,就不多說了。

動畫的方式
SVG採用的是使用文字來定義圖形,這種文件結構非常適合於創建動畫。要改變圖形的位置、大小和顏色,只需要調整對應的屬性就可以了。事實上,SVG有為各種事件處理而專門設計的屬性,甚至很多還是專門為動畫量身定做的。在SVG中,實作動畫可以有以下幾種方式:
1. 使用SVG的動畫元素。這個下面會重點介紹。
2. 使用腳本。採用DOM操作啟動和控制動畫,這個已經是一門成熟的技術了,後面有個小例子。
3. SMIL(Synchronized Multimedia Integration Language)。這篇有興趣的請參考:http://www.w3.org/TR/2008/REC-SMIL3-20081201/。
下面的例子包含了SVG中幾種最基本的動畫

複製代碼
代碼如下:

xmlns="http://www.w3.org/ 2000/svg" version="1.1">
基本動畫元素
fill="none" stroke="blue" stroke-width="2" />

fill="rgb(255,255,0)">
begin= "0s" dur="9s" fill="freeze" from="300" to="0" />
begin="0s" dur= "9s" fill="freeze" from="100" to="0" />
begin="0s" dur="9s" fill= "freeze" from="300" to="800" />
begin="0s" dur="9s" fill="freeze" from= "100" to="300" />




font-family="Verdana" font-size="35.27" visibility="hidden">
It's alive!
begin="3s" dur="6s" fill="freeze" />
begin="3s" dur="6s" fill="freeze" />
from="rgb( 0,0,255)" to="rgb(128,0,0)"
begin="3s" dur="6s" fill="freeze" />
type="rotate" from="-30" to="0"
begin="3s" dur="6s" fill="freeze" />
type="scale" from="1" to="3" additive="sum"
begin="3s" dur="6s" fill="freeze" />




把這段程式碼放到html文件的body中運行一下就可以知道動畫的效果。

動畫元素的公共屬性
第一類:指定目標元素和屬性
xlink:href
這應該是很熟悉了,指向執行動畫的元素。這個元素的必須是在目前的SVG文檔片段中定義的。如果沒有指定這個屬性的話,動畫就會套用到自己的父元素。
attributeName = ""
這個屬性指定了應用動畫的屬性。如果該屬性有namespace的話(不要忘了,SVG本質是XML文檔),這個namespace也要加上。例如下面的例子中分別給xlink取了不同的別名,這裡animate指定屬性的時候就帶了namespace:

複製代碼
複製代碼


代碼如下:


xmlns:xlink="http: //www.w3.org/1999/xlink">
Demonstration of the resolution of namespaces for animation


g>





attributeType = "CSS | XML | auto(預設值)"
這個屬性指定了屬性取值的命名空間,這幾個值的意義如下: CSS:代表attributeName指定的屬性是CSS屬性。 XML:代表attributeName指定的屬性是XML預設命名空間下的屬性(注意svg文檔本質上是xml文檔)。
auto:代表先在CSS屬性中尋找attributeName指定的屬性,如果沒找到,則在預設的XML命名空間下尋找該屬性。

第二類:控制動畫時間的屬性

下列屬性都是動畫時間屬性;它們控制了動畫執行的時間線,包括如何開始和結束動畫,是否重複執行動畫,是否儲存動畫的結束狀態等。
begin = "begin-value-list"
此屬性定義了動畫的開始時間。可以是分號分開的一系列時間值。也可以是一些其他觸發動畫開始的值。例如事件,快捷鍵等。
dur = Clock-value | "media" | "indefinite"
定義了動畫的持續時間。可以設定為以時鐘格式顯示的值。也可以設定為下列兩個值:
media:指定動畫的時間為內部多媒體元素的持續時間。
indefinite:指定動畫時間為無限。
時鐘格式指的是下列這些合法的取值格式:
複製程式碼


程式碼如下:


:30:03= 2 hours, 30 minutes and 3 seconds
:00:10.25 = 50 hours, 10 seconds and 250 milliseconds
:33 = 330 :10.5 = 10.5 seconds = 10 seconds and 500 milliseconds
.2h= 3.2 hours = 3 hours and 12 minutes
min = 45 minutes
s = 30030m. 467= 12 seconds and 467 milliseconds
.5s = 500 milliseconds
:00.005 = 5 milliseconds

end = "end-value-list"
定義了動畫的結束時間。可以是分號分開的一系列值。
min = Clock-value | "media"
max = Clock-value | "media"
設定了動畫持續時間的最大最小值。
restart = "always" | "whenNotActive" | "never"
設定了動畫能否隨時重新開始。 always代表動畫可以隨時開始。 whenNotActive代表只能在沒播放的時候重新開始,例如前一次播放結束了。 never表示動畫不能重新開始。
repeatCount = numeric value | "indefinite"
設定了動畫重複的次數。 indefinite代表無限重複。
repeatDur = Clock-value | "indefinite"
設定重複的總的動畫時間。 indefinite代表無限重複。
fill = "freeze" | "remove(預設值)"
設定了動畫結束後元素的狀態。 freeze表示動畫結束後元素停留在動畫的最後狀態。 remove代表動畫結束以後元素回到動畫前的狀態,這個是預設值。
第三類:定義動畫值的屬性
這些屬性定義了被執行動畫的屬性的取值。其實是定義了關鍵幀和插值的一些演算法。
calcMode = "discrete | linear(預設值) | paced | spline"
定義了動畫插值的方式:discrete:離散的,不插值;linear:線性內插;paced:步長插值;spline:樣條插值。預設是linear(線性內插),但如果屬性不支援線性內插,則會採用discrete插值方式。
values = ""
定義了以分號分隔的動畫關鍵影格的值清單。支援向量值。
keyTimes = ""
定義了以分號分隔的動畫關鍵影格的時間清單。這個和values是一一對應的。這個值是受插值演算法影響的,如果是線性(linear)和樣條插值(spline),則keyTimes的第一個值必須是0,最後一個值必須是1。對於離散(discrete)的不插值的方式,keyTimes的第一個值必須是0。對於步長插值方式,很顯然是不需要keyTimes。而且如果動畫的持續時間設定為indefinite,則忽略keyTimes。
keySplines = ""
這個屬性定義了樣條插值(貝塞爾插值)時的控制點,顯然只有在插值模式選擇為spline才起作用。這個列表中的值取值範圍是0到1。
from = ""
to = ""
by = ""
定義動畫屬性的起始值,結束值和步長值。這裡要注意:如果values已經制定了相關的值,則任何的from/to/by值都會被忽略。
第四類:控制動畫是否是增量式的屬性
有時候,如果相關的值設定的不是絕對值,而是增量值是非常有用的,使用additive屬性可以達到這個目的。
additive = "replace(預設值) | sum"
這個屬性控制了動畫是否是增量式的。 sum表示動畫會較大相關的屬性值或其他低優先順序的動畫上。 replace是預設值,表示動畫會覆寫相關的屬性值或其他低優先順序的動畫。看一個小例子:

複製代碼
代碼如下:


代碼如下:


additive="sum"/>



這個例子示範了矩形width遞增的動畫效果。
有時候,如果重複的動畫結果是疊加起來的,也非常有用,使用accumulate屬性可以達到這個目的。
accumulate = "none(預設值) | sum"
這個屬性控制了動畫效果是否是累積的。 none是預設值,表示重複的動畫不累積。 sum表示重複的動畫效果是累積的。對於單次執行的動畫,該屬性沒有意義。看個小例子:
複製代碼


代碼如下:


additive="sum" accumulate="sum" repeatCount="5" />
這個例子示範了矩形的長度在每次迭代中都在增加。
動畫元素小結
SVG提供了下列動畫元素:
1. animate元素
這個是最基本的動畫元素,可以直接為相關屬性提供不同時間點的值。
2. set元素
這個是animate元素的簡寫形式,支援所有的屬性類型,尤其是當對非數位型的屬性(例如visibility)進行動畫時很方便。 set元素是非增量的,相關的屬性對之無效。 to指定的動畫結束值類型一定要符合屬性的取值類型。
3. animateMotion元素
路勁動畫元素。這個元素大多數屬性都跟上面一樣,只有下面幾個稍微有點區別:
calcMode = "discrete | linear | paced | spline"
這個屬性的預設值不同,在這個元素中預設的是paced 。
path = ""
動畫元素移動的路徑,格式與path元素的d屬性的值的格式是一致的。
keyPoints = ""
這個屬性的值是一系列分號給開的浮點數值,每個值的值範圍是0~1。這些值代表了keyTimes屬性指定的對應時間點移動的距離,這裡距離具體是多少是由瀏覽器自己決定的。
rotate = | auto | auto-reverse"
這個屬性指定了元素移動時旋轉的角度。預設值是0,數字代表旋轉的角度,auto表示隨著路勁的方向轉動物體。個座標對之間用分號隔開例如from="33,15"表示起點x座標為33,y座標為15。 ,一種為使用mpath元素作為animateMotionde的子元素指定路徑。 >看一個小例子:




複製程式碼
程式碼如下:
程式碼如下:

程式碼如下:


br />"http://www.w3.org/Graphics/ SVG/1.1/DTD/svg11.dtd">
xmlns="http://www.w3.org/ 2000/svg" version="1.1"
xmlns:xlink="http://www.w3.org/1999/xlink" >
fill="none" stroke="blue" stroke-width="2" />
fill="none" stroke="blue" stroke-width="7.06"/>



fill="yellow" stroke="red" stroke-width=" 7.06">





4. animateColor元素
顏色動畫元素。這是一個過時的元素,基本上所有功能都可以用animate代替,所以還是不要用了。
5. animateTransform元素

變換動畫元素。看看一些特殊的屬性:
type = "translate | scale | rotate | skewX | skewY"
這個屬性指定了變換的類型,translate是預設值。
from,by和to的值對應的都是對應變換的參數,這還是跟前面講的變換是一致的。 values則是一組分號隔開的這樣的值系列。
支援動畫效果的元素和屬性基本上所有圖形元素(path,rect,ellipse,text,image...),容器元素(svg, g, defs, use, switch, clipPath, mask. ..)都支持動畫。基本上大多數的屬性都支援動畫效果。詳細的說明請參看官方文件。
使用DOM實現動畫

SVG動畫也可以使用腳本完成,DOM的詳細內容後面會介紹,這裡簡單看一個小例子:
複製程式碼
程式碼如下:


br />"http:/ /www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> ;
xmlns=" http://www.w3.org/2000/svg"
onload=" StartAnimation(evt)" version="1.1">

填充=“無”筆畫=“藍色”筆畫寬度=“2”/>

SVG;



實用參考:
腳本索引:http://msdn.microsoft.com/zh-cn/library/ff971910(v=vs.85 ).aspx
開發中心:https://developer.mozilla.org/en/SVG
熱門參考:http://www.chinasvg.com/
官方文件:http://www.w3.org/TR/SVG11/

SVG動畫技術:http://msdn.microsoft.com/zh-cn/library/gg589525(v=vs.85).aspx

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1242
24
如何加速Windows 11中的動畫效果:2種方法解析 如何加速Windows 11中的動畫效果:2種方法解析 Apr 24, 2023 pm 04:55 PM

當微軟推出Windows11時,它帶來了許多變化。其中一項變更是增加了使用者介面動畫的數量。有些使用者想要改變事物的出現方式,他們必須想辦法去做。擁有動畫讓使用者感覺更好、更友善。動畫使用視覺效果使電腦看起來更具吸引力和響應能力。其中一些包括幾秒鐘或幾分鐘後的滑動菜單。電腦上有許多動畫會影響PC效能、減慢速度並影響您的工作。在這種情況下,您必須關閉動畫。本文將介紹使用者可以提高在PC上的動畫速度的幾種方法。您可以使用登錄編輯程式或您執行的自訂檔案來套用變更。如何提高Windows11動畫的

動畫不工作在PowerPoint中[修復] 動畫不工作在PowerPoint中[修復] Feb 19, 2024 am 11:12 AM

您是否正在嘗試製作演示文稿,但無法添加動畫?如果動畫在你的WindowsPC上的PowerPoint中不起作用,那麼這篇文章將會幫助你。這是一個常見的問題,許多人都在抱怨。例如,在Microsoft團隊中演示或在螢幕錄製期間,動畫可能會停止運作。在本指南中,我們將探索各種故障排除技術,以協助您修復在Windows上的PowerPoint中無法運作的動畫。為什麼我的PowerPoint動畫不起作用?我們注意到Windows上PowerPoint中的動畫可能無法運作問題的一些可能原因如下:由於個

CSS動畫:如何實現元素的閃光效果 CSS動畫:如何實現元素的閃光效果 Nov 21, 2023 am 10:56 AM

CSS動畫:如何實現元素的閃光效果,需要具體程式碼範例在網頁設計中,動畫效果有時可以為頁面帶來很好的使用者體驗。而閃光效果是一種常見的動畫效果,它可以使元素更加引人注目。以下將介紹如何使用CSS實現元素的閃光效果。一、閃光的基本實作首先,我們需要使用CSS的animation屬性來實現閃光效果。 animation屬性的值需要指定動畫名稱、動畫執行時間、動畫延遲時

聊聊如何利用 SVG 實現圖片馬賽克效果 聊聊如何利用 SVG 實現圖片馬賽克效果 Sep 01, 2022 am 11:05 AM

不借助 Javascript,如何利用 SVG 實現圖片馬賽克效果?下面這篇文章就來帶大家詳細了解一下,希望對大家有幫助!

跳票 2 年,國產 3D 動畫電影《二郎神之深海蛟龍》定檔 7 月 13 日 跳票 2 年,國產 3D 動畫電影《二郎神之深海蛟龍》定檔 7 月 13 日 Jan 26, 2024 am 09:42 AM

本站1月26日消息,國產3D動畫電影《二郎神之深海蛟龍》發布一組最新劇照,正式宣布將於7月13日上映。據了解,《二郎神之深海蛟龍》是由迷狐星(北京)動漫有限公司、霍爾果斯眾合千澄影業有限公司、浙江橫店影業有限公司、浙江共贏影業有限公司、成都天火科技有限公司、華文映像(北京)影業有限公司出品,王君執導的動畫電影,原定2022年7月22日在中國大陸上映。本站劇情簡介:封神之戰後,姜子牙攜「封神榜」分封諸神,而後封神榜被天庭封印於九州祕境深海之下。事實上,除了分封神位,封神榜中還封緘著眾多強大的妖邪元

如何使用Vue實現打字機動畫特效 如何使用Vue實現打字機動畫特效 Sep 19, 2023 am 09:33 AM

如何使用Vue實現打字機動畫特效打字機動畫是一種常見且引人注目的特效,常用於網站的標題、標語等文字展示上。在Vue中,我們可以透過使用Vue自訂指令來實現打字機動畫效果。本文將詳細介紹如何使用Vue來實現此特效,並提供具體的程式碼範例。步驟1:建立Vue專案首先,我們需要建立一個Vue專案。可以使用VueCLI來快速建立一個新的Vue項目,或手動在HT

主線動畫《明日方舟:冬隱歸路》定檔 PV 公佈,10 月 7 日上線 主線動畫《明日方舟:冬隱歸路》定檔 PV 公佈,10 月 7 日上線 Sep 23, 2023 am 11:37 AM

本站需要重新寫作的內容是:9需要重新寫作的內容是:月需要重新寫作的內容是:23需要重新寫作的內容是:日消息,動畫影集《明日方舟》的第二季主線劇《明日方舟:冬隱歸路》公佈定檔需要重新寫作的內容是:PV,將於需要重新寫作的內容是:10需要重新寫作的內容是:月需要重新寫作的內容是:7需要重新寫作的內容是:日需要重新寫作的內容是:00:23需要重新寫作的內容是:正式上線,點此進入主題官網。需要重新寫作的內容是:本站注意到,《明日方舟:冬隱歸路》是《明日方舟:黎明前奏》的續作,劇情簡介如下:為阻止感染者群組

ppt動畫如何設定先進入再退出 ppt動畫如何設定先進入再退出 Mar 20, 2024 am 09:30 AM

我們在日常的辦公中常常會使用到ppt,那麼你是否對ppt裡邊的每個操作功能都很了解呢?例如:ppt中怎麼設定動畫效果、怎麼設定切換效果、每個動畫的效果長度是多少?每個投影片能不能自動播放、ppt動畫先進入再退出等等,那麼今天這期我就先跟大家分享ppt動畫先進入再退出的具體操作步驟,就在下方,小伙伴們快來看一看吧! 1.首先,我們在電腦中開啟ppt,點選文字方塊外側選取文字框,(如下圖紅色圈出部分所示)。 2.然後,點選選單列中的【動畫】,選取【擦除】的效果,(如圖紅色圈出部分所示)。 3.接下來,點擊【

See all articles