SVG 动态添加元素与事件
SVG文件是由各个元素组成。元素由标签定义,而标签格式即html的元素定义格式。但是载入一个SVG文件,却无法通过常规的js获取对象方式来获取到SVG中定义的元素,更无法通过这种方式来动态添加SVG元素与事件。 SVG元素的操作都要借助于SVG的document对象。SVG的document对象获取方式为:
SVG 快速入门
svgDoc = document.getElementById("mySVG").getSVGDocument();其中mySVG为SVG主体的id。注意需要在SVG完全加载完成后才可获取,否则获取到的是null。
然后调用svgDoc. createElementNS()函数即可创建SVG元素,为创建的元素进行属性设置,
并绑定事件监听器。最后调用svgDoc.rootElement.appendChild()函数来将创建的元素添加给svgDoc。
示例代码:
<embed id="mySVG" src="map.svg" type="image/svg+xml" />
<div>x坐标值<input id="xValue"></div>
<div>y坐标值<input id="yValue"></div>
<div>文本内容<input id="iText"></div>
<button id="add">动态添加元素</button>
<script>
var svgDoc = null;
var time = null;
// 动态添加元素
var addElement = function(x, y, nodeText) {
// 添加圆形
var c = svgDoc.createElementNS('http://www.w3.org/2000/svg', 'circle');
c.setAttribute('cx', x);
c.setAttribute('cy', y);
c.r.baseVal.value = 7;
c.setAttribute('fill', 'red');
c.addEventListener("click", function() {
alert('圆形点击测试:' + nodeText);
});
c.addEventListener("mouseover", function() {
console.log('圆形鼠标悬停测试:' + nodeText);
});
svgDoc.rootElement.appendChild(c);
// 添加文本
var t = svgDoc.createElementNS('http://www.w3.org/2000/svg', 'text');
t.setAttribute("x", parseInt(x) + 5);
t.setAttribute("y", parseInt(y) + 10);
t.setAttribute("font-size", "20");
t.setAttribute('fill', 'green');
t.addEventListener("click", function() {
alert('文本点击测试:' + nodeText);
});
t.addEventListener("mouseover", function() {
console.log('文本鼠标悬停测试:' + nodeText);
});
t.innerHTML = nodeText;
svgDoc.rootElement.appendChild(t);
};
// 载入SVG
var loadSvg = function() {
svgDoc = document.getElementById("mySVG").getSVGDocument();
if(svgDoc == null) {
time = setTimeout("loadSvg()", 300);
} else {
clearTimeout(time);
loadCallback();
}
};
// 载入回调
var loadCallback = function() {
console.log("加载完成");
};
$(function() {
// 延迟加载
setTimeout("loadSvg()", 300);
// 按钮
$("#add").click(function() {
var nodeText = $("#iText").val();
if(nodeText == "") {
nodeText = "未输入文本";
}
console.log(nodeText);
addElement($("#xValue").val(), $("#yValue").val(), nodeText);
});
});
SVG 动态添加元素与事件的更多相关文章
- jqery 动态添加元素 绑定事件
jQuery动态添加元素: var url = "...";//服务地址 $.ajax({ type: 'post', url: url, data:{fireId:fireId} ...
- jQuery1.9为动态添加元素绑定事件以及获取和操作checkbox的选择属性
1.jQuery为动态添加的元素绑定事件:在1.7之后,添加了live()方法,1.9后又被移除,1.9中可用on()方法: $(function() { $('.btn').on('click', ...
- jquery html 动态添加元素绑定事件
由于实际的需要,有时需要往网页中动态的插入HTML内容,并在插入的节点中绑定事件处理函数.我们知道,用Javascript向HTML文档中 插入内容,有两种方法, 一种是在写HTML代码写入JS,然后 ...
- js动态添加元素绑定事件问题
//开始是直接普通写的绑定click事件 其中li a i 中的i是动态添加的 结果是触发不了..$("li a i").click(function () { $(this).m ...
- JS动态添加元素的事件动态绑定
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- jQuery动态添加元素事件
在项目中遇到需要jQuery动态添加元素的事件,做了一个demo,方便以后遇到相同的问题可以用上: <!DOCTYPE html> <html> <head> &l ...
- jquery动态添加元素无法触发绑定事件的解决方案。
jquery动态添加元素无法触发绑定的事件的解决方案. ╭(●`∀´●)╯二狗最近在工作中遇到一个问题,即当用jquery动态添加元素后,发现给动态添加的元素却无法触发事件(╯#-_-)╯╧═╧ ( ...
- jquerymobile动态添加元素之后不能正确渲染解决方法
jquerymobile动态添加元素之后有些不能被正确渲染的解决方法: listview: 添加 jq(".detail").listview(&quo ...
- angular.element方法汇总以及AngularJS 动态添加元素和删除元素
addClass()-为每个匹配的元素添加指定的样式类名after()-在匹配元素集合中的每个元素后面插入参数所指定的内容,作为其兄弟节点append()-在每个匹配元素里面的末尾处插入参数内容att ...
随机推荐
- BZOJ2594:水管局长数据加强版
Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...
- 大O法时间复杂度计算
困惑的点——log,如何计算得出? ① 上限:用来表示该算法可能有的最高增长率. ② 大O表示法:如果某种算法的增长率上限(最差情况下)是f(n),那么说这种算法“在O(f(n))中”.n为输入规模. ...
- JDK源码阅读--ArrayList
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess ...
- PAT甲级——A1009 Product of Polynomials
This time, you are supposed to find A×B where A and B are two polynomials. Input Specification: Each ...
- Maven实战08_仓库
何为Maven仓库 在Maven世界中.任何一个依赖.插件或者项目构建的输出,都可以称之为构件.例如依赖log4j-1.2.15.jar是一个构件,差价maven-compile-plugin-2.0 ...
- 《DSP using MATLAB》Problem 8.11
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- Python学习之--数据基础
对于Python来说,一切皆对象.包括数字.字符串.列表等,对象是由类来创建的,那对象的一个优点就是可以使用其创建类中所定义的各种方法. 查看对象/方法 1)可以在命令行中直接查看,如下: >& ...
- pandas一些基本操作(DataFram和Series)_4
import numpy as np;import pandas as pd;kill_num=pd.Series([10,12,8,5,0,2,6])#击杀数量#青铜1200-2000#白银2001 ...
- JS--封装JS跳转页面函数
//JS跳转页面 function gourl($iAlert,$iPage,$history='',$target="window") { if ($iAlert != &quo ...
- 关于ie11的浏览器检测
我的电脑昨天更新的时候把ie11给更新出来了,然后发现我的skylineweb项目提示我的浏览器不是ie,这样显然是浏览器检测出现了问题.查找后找到了下面的解决方法.大家的电脑如果也更新成了ie11的 ...