婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > HTML5之SVG 2D入門12—SVG DOM及DOM操作介紹

HTML5之SVG 2D入門12—SVG DOM及DOM操作介紹

熱門標簽:400開頭的電話好申請不 咸陽穩定外呼系統軟件 怎么做百度地圖標注 地圖標注柱狀圖 智能芯電話機器人 百度地圖標注為什么總是封號 四川移動電銷外呼客戶管理系統 小朱地圖標注 臨海地圖標注app
使用腳本可以很方便的完成各種復雜的任務,也是完成動畫和交互的一種主流方式。由于SVG是html的元素,所以支持普通的DOM操作,又由于SVG本質上是xml文檔,所以也有一種特殊的DOM操作,大多稱之為SVG DOM。當然了,由于目前IE不支持SVG,開發基于IE的SVG頁面需要采用不同的方式。這部分的知識大家其實都很熟悉,下面只是簡單的看一下。

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

復制代碼
代碼如下:

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

發現了沒,與普通的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;
element.width.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 100);
element.height.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_EMS, 10);

DOM腳本屬于傳統的腳本,其特征是通過構建“值字符串”來設置各個項。SVG DOM腳本樣式的優點是,你不必構建“值字符串”,所以性能優于DOM腳本。

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

復制代碼
代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="300">
<script type="text/ecmascript">
<![CDATA[
function showRectColor() {
alert(document.getElementById("myBlueRect").getAttributeNS(null,"fill"));
}
function showRectArea(evt) {
var width = parseFloat(evt.target.getAttributeNS(null,"width"));
var height = parseFloat(evt.target.getAttributeNS(null,"height"));
alert("The rectangle area is: " + (width * height));
}
function showRootChildrenNr() {
alert("Nr of Children: "+document.documentElement.childNodes.length);
}
]]>
</script>
<g id="firstGroup">
<rect id="myBlueRect" width="100" height="50" x="40" y="20" fill="blue" onclick="showRectArea(evt)"/>
<text x="40" y="100" onclick="showRectColor()">Click on this text to show rectangle color.</text>
<text x="40" y="130">Click on rectangle to show rectangle area.</text>
<text x="40" y="160" onclick="showRootChildrenNr()">Click on this text to show the number of child
<tspan x="40" dy="20">elements of the root element.</tspan></text>
</g>
</svg>
</body>
</html>

在這個例子中,列舉了常見的獲取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 Core Object API:http://reference.sitepoint.com/javascript/Document
SVG DOM常用屬性和方法:http://riso.iteye.com/blog/393454, http://riso.iteye.com/blog/393459

標簽:陜西 黃石 公主嶺 平頂山 平涼 南平 黃石 山南

巨人網絡通訊聲明:本文標題《HTML5之SVG 2D入門12—SVG DOM及DOM操作介紹》,本文關鍵詞  HTML5,之,SVG,入門,DOM,及,操作,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《HTML5之SVG 2D入門12—SVG DOM及DOM操作介紹》相關的同類信息!
  • 本頁收集關于HTML5之SVG 2D入門12—SVG DOM及DOM操作介紹的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    另类成人小视频在线| 久久久五月婷婷| 午夜伦理一区二区| 日韩精品一区二区三区视频在线观看 | 精品1区2区在线观看| 色播五月激情综合网| 国产一区二区伦理| 老司机免费视频一区二区| 偷窥国产亚洲免费视频| 首页国产丝袜综合| 日韩国产精品久久久| 午夜欧美2019年伦理| 婷婷综合在线观看| 美女一区二区久久| 蜜臀a∨国产成人精品| 蜜桃一区二区三区在线观看| 蜜桃91丨九色丨蝌蚪91桃色| 青青青爽久久午夜综合久久午夜| 香蕉加勒比综合久久 | 天天av天天翘天天综合网 | 日韩视频一区二区三区在线播放| 国产精品99久久久久久似苏梦涵 | 91啪九色porn原创视频在线观看| 国产精品中文字幕日韩精品 | 欧美日本一区二区| 欧美午夜精品久久久久久孕妇 | 久久一区二区视频| 国产欧美一区二区精品婷婷| 国产午夜精品久久久久久免费视 | 午夜久久电影网| 日韩二区三区在线观看| 日本不卡在线视频| 国产美女精品人人做人人爽| www.av亚洲| 欧美日韩极品在线观看一区| 欧美r级在线观看| 51久久夜色精品国产麻豆| 日韩欧美123| 国产欧美1区2区3区| 中文字幕不卡在线观看| 国产精品私人自拍| 一区二区三区欧美视频| 日韩精品福利网| 久久成人免费网| a美女胸又www黄视频久久| 欧美吻胸吃奶大尺度电影| 亚洲精品一区二区三区99| 国产精品久久久久影院色老大 | 国产在线精品一区二区| 91网上在线视频| 91精品国产综合久久久久久| 久久伊人蜜桃av一区二区| 久久久久久久av麻豆果冻| 亚洲国产精品精华液2区45| 亚洲激情中文1区| 久久精品国产99久久6| 九色综合国产一区二区三区| 国产精品18久久久久久久久久久久| 国产主播一区二区| 欧美性猛交xxxx黑人交| 日韩一级欧美一级| 亚洲欧美乱综合| 五月天欧美精品| 国内精品国产成人国产三级粉色| 99免费精品在线观看| 91麻豆精品国产自产在线| 中文字幕欧美区| 免费一级欧美片在线观看| 色婷婷激情综合| 日本一区二区免费在线| 久久99精品国产麻豆不卡| aaa欧美色吧激情视频| 日韩欧美一区二区三区在线| **欧美大码日韩| 日韩二区在线观看| 色综合久久综合中文综合网| 2021中文字幕一区亚洲| 日本不卡一二三| 欧美三级日韩在线| 亚洲乱码国产乱码精品精的特点| 丁香婷婷深情五月亚洲| 日韩欧美高清在线| 一片黄亚洲嫩模| 成av人片一区二区| 国产精品免费aⅴ片在线观看| 日韩精品电影一区亚洲| 欧美在线一区二区| 亚洲免费视频中文字幕| 99久久99久久精品免费观看| 欧美高清在线视频| 成人国产电影网| 日韩欧美一区在线观看| 久久精品国产一区二区三| 日韩一卡二卡三卡| 天堂一区二区在线| 精品视频免费在线| 亚洲精品一二三区| 日本久久精品电影| 依依成人综合视频| 欧美美女bb生活片| 亚洲精品高清在线观看| 欧美日韩亚洲丝袜制服| 国产精品久久久久久久久免费樱桃 | 欧美日韩一区二区三区不卡| 国产日产欧美一区二区三区 | 国产成人aaa| 久久综合九色综合欧美就去吻| 精品一区二区免费| 国产亚洲福利社区一区| 成人免费高清在线| 一区二区三区**美女毛片| 欧美日韩国产综合久久| 亚洲 欧美综合在线网络| 538在线一区二区精品国产| 久久国产视频网| 久久综合资源网| jlzzjlzz亚洲女人18| 亚洲精选在线视频| 欧美在线观看18| 久久99这里只有精品| 国产精品人成在线观看免费 | 国产电影精品久久禁18| 国产拍欧美日韩视频二区| 国产99久久久国产精品免费看| 国产精品久线在线观看| 欧美日韩国产区一| 美女脱光内衣内裤视频久久网站| 国产亚洲成aⅴ人片在线观看| 欧洲一区在线观看| 国产一区在线观看视频| 亚洲人123区| 欧美在线观看视频在线| 国产在线视频精品一区| 伊人夜夜躁av伊人久久| 久久久五月婷婷| 欧美日韩www| 成人高清免费在线播放| 日韩黄色一级片| 亚洲婷婷国产精品电影人久久| 日韩亚洲欧美综合| 在线日韩国产精品| 国产精品亚洲一区二区三区妖精| 亚洲一区二区三区四区五区中文| 欧美精品一区二区三区蜜桃| 日本久久电影网| 国产成a人无v码亚洲福利| 日本欧美一区二区在线观看| 亚洲欧美一区二区三区极速播放 | 欧美综合一区二区| 九九九久久久精品| 亚洲国产一区二区三区| 国产精品国产三级国产普通话99| 911精品国产一区二区在线| 成av人片一区二区| www久久久久| 欧美无砖砖区免费| 成人h精品动漫一区二区三区| 青青青伊人色综合久久| 亚洲免费av高清| 欧美mv日韩mv国产| 欧美日韩你懂得| 成人免费三级在线| 国产乱子伦视频一区二区三区| 麻豆国产欧美日韩综合精品二区 | 韩国一区二区在线观看| 一区二区三区在线观看视频| 日韩亚洲欧美在线观看| 国产91丝袜在线18| 亚洲综合偷拍欧美一区色| 国产精品拍天天在线| 欧美视频精品在线| 色噜噜狠狠一区二区三区果冻| 国产91精品精华液一区二区三区| 日产欧产美韩系列久久99| 一级日本不卡的影视| 中文字幕免费不卡| 国产精品久久久久久久浪潮网站 | 亚洲国产精品久久人人爱| 亚洲天堂免费在线观看视频| 粉嫩欧美一区二区三区高清影视| 精品一区二区在线看| 午夜精品福利一区二区蜜股av| 亚洲区小说区图片区qvod| 中文字幕乱码久久午夜不卡| 久久久久久久免费视频了| 欧美肥胖老妇做爰| 日韩一区二区在线免费观看| 色综合久久综合网欧美综合网| a级精品国产片在线观看| 成人av集中营| 不卡视频免费播放| 国内精品久久久久影院薰衣草 | 久久国产精品第一页| 理论片日本一区| 美女一区二区三区在线观看| 精品无人码麻豆乱码1区2区 | 精品无人区卡一卡二卡三乱码免费卡| 久久99精品久久久久久| 午夜国产不卡在线观看视频| 亚洲成人免费看|