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

互動性
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
理解H5:含義和意義理解H5:含義和意義May 11, 2025 am 12:19 AM

H5是HTML5,是HTML的第五個版本。 HTML5提升了網頁的表現力和交互性,引入了語義化標籤、多媒體支持、離線存儲和Canvas繪圖等新特性,推動了Web技術的發展。

H5:可訪問性和網絡標準合規性H5:可訪問性和網絡標準合規性May 10, 2025 am 12:21 AM

無障礙訪問和網絡標準遵循對網站至關重要。 1)無障礙訪問確保所有用戶都能平等訪問網站,2)網絡標準遵循提高網站的可訪問性和一致性,3)實現無障礙訪問需使用語義化HTML、鍵盤導航、顏色對比度和替代文本,4)遵循這些原則不僅是道德和法律要求,還能擴大用戶群體。

HTML中的H5標籤是什麼?HTML中的H5標籤是什麼?May 09, 2025 am 12:11 AM

HTML中的H5標籤是第五級標題,用於標記較小的標題或子標題。 1)H5標籤幫助細化內容層次,提升可讀性和SEO。 2)結合CSS可定製樣式,增強視覺效果。 3)合理使用H5標籤,避免濫用,確保內容結構邏輯性。

H5代碼:Web結構的初學者指南H5代碼:Web結構的初學者指南May 08, 2025 am 12:15 AM

HTML5構建網站的方法包括:1.使用語義化標籤定義網頁結構,如、、等;2.嵌入多媒體內容,使用和標籤;3.應用表單驗證和本地存儲等高級功能。通過這些步驟,你可以創建一個結構清晰、功能豐富的現代網頁。

H5代碼結構:組織內容以實現可讀性H5代碼結構:組織內容以實現可讀性May 07, 2025 am 12:06 AM

通過合理的H5代碼結構可以讓頁面在眾多內容中脫穎而出。 1)使用語義化標籤如、、等組織內容,使結構清晰。 2)通過CSS佈局如Flexbox或Grid控制頁面在不同設備上的呈現效果。 3)實現響應式設計,確保頁面在不同屏幕尺寸上自適應。

H5與較舊的HTML版本:比較H5與較舊的HTML版本:比較May 06, 2025 am 12:09 AM

HTML5(H5)與舊版本HTML的主要區別包括:1)H5引入了語義化標籤,2)支持多媒體內容,3)提供離線存儲功能。 H5通過新標籤和API增強了網頁的功能和表現力,如和標籤,提高了用戶體驗和SEO效果,但需注意兼容性問題。

H5與HTML5:澄清術語和關係H5與HTML5:澄清術語和關係May 05, 2025 am 12:02 AM

H5和HTML5的區別在於:1)HTML5是網頁標準,定義結構和內容;2)H5是基於HTML5的移動網頁應用,適用於快速開發和營銷。

HTML5特徵:H5的核心HTML5特徵:H5的核心May 04, 2025 am 12:05 AM

HTML5的核心特性包括語義化標籤、多媒體支持、表單增強和離線存儲與本地存儲。 1.語義化標籤如、等提高了代碼可讀性和SEO效果。 2.多媒體支持通過和標籤簡化了嵌入媒體內容的過程。 3.表單增強引入了新的輸入類型和驗證屬性,簡化了表單開發。 4.離線存儲和本地存儲通過ApplicationCache和localStorage等提高了網頁性能和用戶體驗。

See all articles

熱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

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

熱門文章

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Mac版

SublimeText3 Mac版

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

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具