首頁 web前端 H5教程 HTML5之SVG 2D入門12—SVG DOM及DOM操作介紹_html5教學技巧

HTML5之SVG 2D入門12—SVG DOM及DOM操作介紹_html5教學技巧

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

使用腳本可以很方便的完成各種複雜的任務,也是完成動畫和互動的一種主流方式。由於SVG是html的元素,所以支援普通的DOM操作,又由於SVG本質上是xml文檔,所以也有一種特殊的DOM操作,大多稱為SVG DOM。當然了,由於目前IE不支援SVG,開發基於IE的SVG頁面需要不同的方式。這部分的知識大家其實都很熟悉,下面只是簡單的看一下。

HTML頁中的DOM操作
DOM大家應該很熟悉了,這裡先看一個小例子:

複製程式碼
程式碼如下:



<script> <br />function CreateSVG () { <br />var xmlns = "http:/xmlns = "http:/ /www.w3.org/2000/svg"; <br />var boxWidth = 300; <br />var boxHeight = 300; <br />var svgElem = document.createElementNS (xmlns, "svg") <emem. setAttributeNS (null, "viewBox", "0 0 " boxWidth " " boxHeight); <br />svgElem.setAttributeNS (null, "width", boxWidth); <br />svgElem.setAttributeNS. <br />svgElem.style.display = "block"; <br />var g = document.createElementNS (xmlns, "g"); <br />svgElem.appendChild (g); <br />g.setAttributeNS (null, ' transform', 'matrix(1,0,0,-1,0,300)'); <br />// draw linear gradient <br />var defs = document.createElementNS (xmlns, "defs"); <br />var grad = document.createElementNS (xmlns, "linearGradient"); <br />grad.setAttributeNS (null, "id", "gradient"); <br />grad.setAttributeNS (null, "x1", "0%"); <br />grad.setAttributeNS (null, "x2", "0%"); <br />grad.setAttributeNS (null, "y1", "100%"); <br />grad.setAttributeNS (null, "y2" "0%"); <br />var stopTop = document.createElementNS (xmlns, "stop"); <br />stopTop.setAttributeNS (null, "offset", "0%"); <br />stopTop.setAttributeNS.setAttribute(nullull , "stop-color", "#ff0000"); <br />grad.appendChild (stopTop); <br />var stopBottom = document.createElementNS (xmlns, "stop"); <br />stopBottom.setAttributeNS (nullull, " offset", "100%"); <br />stopBottom.setAttributeNS (null, "stop-color", "#0000ff"); <br />grad.appendChild (stopBottom); <br />defs.appendld (grad); <br />g.appendChild (defs); <br />// draw borders <br />var coords = "M 0, 0"; <br />coords = " l 0, 300"; <br />coords = " l 300 , 0"; <br />coords = " l 0, -300"; <br />coords = " l -300, 0"; <br />var path = document.createElementNS (xmlns, "path"); <br /> path.setAttributeNS (null, 'stroke', "#000000"); <br />path.setAttributeNS (null, 'stroke-width', 10); <br />path.setAttributeNS (null, 'stroke-linejoin', " round"); <br />path.setAttributeNS (null, 'd', coords); <br />path.setAttributeNS (null, 'fill', "url(#gradient)"); <br />path.setAttributeNS (nullull , 'opacity', 1.0); <br />g.appendChild (path); <br />var svgContainer = document.getElementById ("svgContainer"); <br />svgContainer.appendld (svgElem); </script>






發現了沒,與普通的html元素的DOM操作完全一樣:
選擇元素:document.getElementById
創建元素:document.createElementNS
創建子元素的另外一種方式:element. createChildNS
新增元素:node.appendChild
設定元素的屬性:element.setAttributeNS/element.setAttribute
除了上面這幾個操作,下面的操作和屬性也很常見:
取得元素的屬性值: element.getAttributeNS/element.getAttribute
檢查元素是否存在某屬性:element.hasAttributeNS
移除元素的某屬性:element.removeAttributeNS
父元素、子元素和兄弟節點:element. parentNode/element.firstChild/child.nextSibling
這些方法這裡不再詳細介紹了;此外,DOM樹的節點結構,物件之間的繼承關係也都是差不多的,就不詳述了。需要的同學參考後面的DOM Core Object的文檔。
不過,要注意的是SVG本質上是XML文檔,所以基本採用的DOM方法都是帶NS結尾的方式,來提供相關的namespace;如果創建元素時已經提供了namespace,而且沒有多個namespace的問題,那麼設定相關屬性的時候,也可以選擇使用不含NS的版本,例如直接使用element.setAttribute設定屬性值,但是總的來說,還是強烈建議使用有NS結尾的版本,因為這個版本總是工作正常的,即使在多namespace的情況下。
SVG DOM
這個與標準的DOM有哪些不同,我也沒找到什麼全面的資料,目前只知道對屬性的賦值方式是不同的。如果有了解這方面的同學還請吱一聲。
上面的範例中,我們使用element.setAttributeNS/element.setAttribute來給屬性賦值,在SVG DOM中,可以使用物件導向的方式,透過存取點號來賦予物件的屬性值,例如下面是兩種方式的比較:
普通的DOM方式:

複製程式碼
程式碼如下:


程式碼如下:element.setAttribute("x", "10");
element.setAttribute("y", "20");
element.setAttribute("width", "100%");
element.setAttribute("height", "2em");


而SVG DOM的方式:




程式碼如下:

element.x.baseVal.value = 10;
element.y.baseVal.value = 20;
el.width>el.width. .baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 100); element.height.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_EMS, 10);

嵌入SVG的腳本
如果要在SVG內部添加腳本,就需要使用script元素,這個前面已經講過了,除了這一點,基本上與把腳本放到外面的HTML中是一樣的。看一個例子:
複製程式碼程式碼如下:




頭>

}
function showRectArea(evt) {
var width = parseFloat(evt.target.getAttributeNS(null,"width"));
var height = parsetarFloat(evk. "));
alert("矩形面積為:" (寬* 高));
}
function showRootChildrenNr() {
alert("子節點數量:" document.documentElement.childNodes .length);
}
]]>
腳本>


按一下此文字可顯示矩形顏色。
點選長方形顯示矩形區域。
點擊此文字可顯示孩子的數量
根元素的元素。



身體>


在這個範例中,列舉了常見的取得DOM 物件的方式
1. 透過document.getElementById或document.getElementByClassName之類的方法取得物件;
2. 透過document.documentElement或document.rootElement 取得物件; document物件;
3. 透過事件參數evt.target取得產生事件的物件。方式的優點就是不使用id就可以取得產生事件的物件。
其餘的腳本基本上和普通的DOM是一樣的。

實用參考:
腳本索引: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/
DOM 核心物件API:http://reference.sitepoint.com/javascript/Document
SVG DOM常用屬性與方法:http://riso.iteye.com/blog/393454, http://riso.iteye.com/blog/393459
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

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

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

svg怎麼轉jpg格式 svg怎麼轉jpg格式 Nov 24, 2023 am 09:50 AM

svg可以透過使用影像處理軟體、使用線上轉換工具和使用Python影像處理庫的方法來轉jpg格式。詳細介紹:1.影像處理軟體包括Adobe Illustrator、Inkscape和GIMP;2、線上轉換工具包括CloudConvert、Zamzar、Online Convert等;3、Python影像處理庫等等。

vue dom是什麼意思啊 vue dom是什麼意思啊 Dec 20, 2022 pm 08:41 PM

dom是一種文件物件模型,同時也是用於html程式設計的接口,透過dom來操作頁面中的元素。 DOM是HTML文件的記憶體中物件表示,它提供了使用JavaScript與網頁互動的方式。 DOM是節點的層次結構(或樹),其中document節點為根。

vue3中ref綁定dom或元件失敗的原因為何及怎麼解決 vue3中ref綁定dom或元件失敗的原因為何及怎麼解決 May 12, 2023 pm 01:28 PM

vue3ref綁定dom或元件失敗原因分析場景描述在vue3中常用到使用ref綁定元件或dom元素的情況,很多時候,明明使用ref綁定了相關元件,但是經常ref綁定失敗的情況。 ref綁定失敗情況舉例ref綁定失敗的絕大多數情況是,在ref和元件綁定的時候,該元件還未渲染,所以綁定失敗。或是元件剛開始未渲染,ref未綁定,當元件開始渲染,ref也開始綁定,但是ref和元件並未綁定完成,這個時候使用元件相關的方法就會出現問題。 ref綁定的元件使用了v-if,或他的父元件使用了v-if導致頁面

深入淺析vue3+vite中怎麼使用svg圖標 深入淺析vue3+vite中怎麼使用svg圖標 Apr 28, 2022 am 10:48 AM

svg圖片在專案中使用的非常廣泛,以下這篇文章帶大家介紹如何在vue3 + vite 中使用svg圖標,希望對大家有所幫助!

Vue3取得DOM節點的方式有哪些 Vue3取得DOM節點的方式有哪些 May 11, 2023 pm 04:55 PM

1.原生js取得DOM節點:document.querySelector(選擇器)document.getElementById(id選擇器)document.getElementsByClassName(class選擇器)....2.vue2中取得目前元件的實例物件:因為每個vue的元件實例上,都包含一個$refs對象,裡面儲存著對應的DOM元素或元件的參考。所以在預設情況下,元件的$refs指向一個空物件。可以先在元件上加上ref="名字",然後透過this.$refs.

PHP中的DOM操作指南 PHP中的DOM操作指南 May 21, 2023 pm 04:01 PM

在網頁開發中,DOM(DocumentObjectModel)是一個非常重要的概念。它可以讓開發者輕鬆地對一個網頁的HTML或XML文件進行修改和操作,例如新增、刪除、修改元素等。而PHP內建的DOM操作庫也為開發者提供了豐富的功能,本文將介紹PHP中的DOM操作指南,希望可以幫助大家。 DOM的基本概念DOM是一個跨平台、獨立於語言的API,它可以將

北大出品:紋理品質與多視角一致性的最新SOTA,在2分鐘內實現1張圖的3D轉換 北大出品:紋理品質與多視角一致性的最新SOTA,在2分鐘內實現1張圖的3D轉換 Jan 10, 2024 pm 11:09 PM

只要兩分鐘,玩圖片轉3D!還是高紋理品質、多視角高一致性的那種。不管是什麼物種,輸入時的單視圖圖像還是這樣嬸兒的:兩分鐘後,3D版大功告成:△上,Repaint123(NeRF);下,Repaint123(GS)新方法名為Repaint123,核心思想是將2D擴散模型的強大影像生成能力與再繪策略的紋理對齊能力相結合,來產生高品質、多視角一致的影像。此外,該研究還引入了針對重疊區域的可見性感知自適應再繪強度的方法。 Repaint123一舉解決了先前方法多視角偏差大、紋理退化、生成慢等問題。目前項

See all articles