当SVG图形较复杂时,一行行地写xml会让人崩溃的。如果先在javascript中map变量设置一些属性,再动态生成就容易得多了。不过只对有大量重复形状时才会减少工作量。
这里简单演示生成"Label"的过程,参考了如下页面:
http://starkravingfinkle.org/projects/demo/svg-bubblemenu-in-html.xml
dynashow.svg
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/TR/2001/REC-SVG-20050904/DTD/svg11.dtd">
<!-- Created by amaya 11.3.1, see http://www.w3.org/Amaya/ -->
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600"
height="600" baseProfile="full" onload="init()">
<title>Dynamic Create Sharp</title>
<style type="text/css">
g rect{stroke: blue; stroke-opacity: 1; stroke-width: 1px; fill: white;}
g text{font-family:Verdana,Tahoma; font-weight:bold; font-size:small; fill:red; }</style>
<script type="text/javascript" xlink:href="dynashow.js"> </script>
<script type="text/javascript">
<![CDATA[
var labs = [{x: "10", y: "10", width: "100", height: "35", label: "Good Moring!"},
{x: "30", y: "50", width: "140", height: "35", label: "Hello world!"},
{x: "50", y: "100", width: "250", height: "35", label: "Dyanmic create SVG Element!"}];
function init() {
for (var i = 0; i < labs.length; i++) {
createMySharp(labs[i]);
}
}
]]>
</script>
</svg>
注意第12行引入外部javascript文件的方法
<script type="text/javascript" xlink:href="dynashow.js"> </script>, 需要使用xlink:href属性。该文件中的js代码,labs定义了一个代表3个sharp相关数据的列表,init()将会使用该列表来生成相关svg元素。
dynashow.js
var SVG_NS = "http://www.w3.org/2000/svg";
var XLINK_NS = "http://www.w3.org/1999/xlink";
var ATTR_MAP = {
"className": "class",
"svgHref": "href"
};
var NS_MAP = {
"svgHref": XLINK_NS
};
function makeSVG(tag, attributes){
var elem = document.createElementNS(SVG_NS, tag);
for (var attribute in attributes) {
var name = (attribute in ATTR_MAP ? ATTR_MAP[attribute] : attribute);
var value = attributes[attribute];
if (attribute in NS_MAP)
elem.setAttributeNS(NS_MAP[attribute], name, value);
else
elem.setAttribute(name, value);
}
return elem;
}
//var lab1 = {x: "10", y: "10", width: "100", height: "35", label: "Good Moring!"};
function createMySharp(sharpData) {
var svgdoc = document.documentElement;
var group = makeSVG("g", {x: "0", y: "0", transform: "translate("+sharpData.x+", "+sharpData.y+")"});
var rect = makeSVG("rect", {x: "0", y: "0", width: sharpData.width, height: sharpData.height});
group.appendChild(rect);
var text = makeSVG("text", {x: "0", y: "25"});
text.textContent = sharpData.label;
group.appendChild(text);
svgdoc.appendChild(group);
}
makeSVG()在svg名字空间下生成相应elemnt,并设置属性,属性由一个map表示。ATTR_MAP是为了避免svg属性名和javascript中的关键字或命名规则相冲突,而NS_MAP是由于一些属性如xlink:href在svg名字空间之外。
createMySharp()就在svg文件的创建element的主体了,我们可以根据实际需要来定义一些形状并进行参数化,还可以更进一步定义自己的图形库了。

- 大小: 23.8 KB
分享到:
相关推荐
4. **动态创建SVG**:JavaScript还可以在运行时动态创建SVG元素,这在构建数据可视化或复杂交互效果时非常有用。 5. **SMIL动画**:SVG包含一套内置的Simple Animation(SMIL)功能,可以让元素在时间轴上移动、...
JavaScript可以动态创建SVG元素,如`<rect>`、`<circle>`、`<path>`等,并将其插入到DOM树中。例如,通过`document.createElementNS()`方法创建SVG元素,然后使用`appendChild()`或`insertBefore()`方法添加到指定...
- 动态生成SVG元素:通过JavaScript动态创建SVG元素,可以灵活地在页面加载后添加图形。 - 图形动画:利用`requestAnimationFrame`和属性变化来实现平滑的SVG动画效果。 - 图形交互:绑定事件监听器,响应用户的点击...
在Vue项目中动态渲染SVG并在SVG元素上添加点击事件是一个高级功能,它要求开发者对Vue的组件系统、虚拟DOM以及事件处理有深入理解。通过上述步骤和注意事项的介绍,我们可以更好地掌握如何在Vue中实现这一功能。此外...
总之,SVG元素属性是创建和控制矢量图形的核心部分。理解并熟练掌握这些属性及其遍历方法,对于任何希望在Web或应用程序中使用SVG图形的开发者来说都至关重要。通过博文中的实例和`attributes.svg`文件,我们可以...
1. **创建SVG元素**:使用HTML或JavaScript动态创建SVG元素,如`<svg>`、`<circle>`(表示星星)、`<polygon>`或`<path>`(表示飞船)。 2. **初始化位置**:设置飞船和星星的初始位置。 3. **定义动画**:使用...
当HTML页面中含有SVG元素,如使用`jsPlumb`创建的流程图,`html2canvas`在截图时可能会出现不完整或者丢失的情况,特别是连线等动态元素往往无法正确捕获。 为了解决这个问题,我们可以引入`canvg`库。`canvg`是一...
5. **DOM操作**:JavaScript可以用来动态创建SVG元素,比如每颗流星都是一个独立的SVG对象。在流星坠落后,可能需要将其从DOM树中移除,或者改变其样式表示已消失。 6. **性能优化**:由于大量流星可能同时出现,...
通过JavaScript,我们可以动态地创建、修改SVG元素。使用`document.createElementNS()`方法可以创建新的SVG元素,然后使用`appendChild()`将其添加到SVG文档中。还可以通过`setAttribute()`来设置元素的属性,如...
总结,plain-draggable是一款强大的HTML和SVG元素拖放插件,它以其高性能、易用性和广泛的兼容性,成为开发者构建动态交互界面的理想工具。结合HTML5库和其他前端技术,可以构建出更丰富、更具有吸引力的Web应用。
1. 动态生成SVG图像:根据程序逻辑动态创建SVG元素,构建复杂的矢量图形。 2. SVG文件解析:读取SVG文件,将其内容转换为Python对象,方便进一步处理。 3. SVG文件合并与分割:将多个SVG文件整合到一起,或者从大...
在本压缩包文件中,我们看到的是关于SVG元素与鼠标事件的一些简单实例,这对于初学者来说是很好的学习资源。 首先,我们要理解SVG中的基本元素。SVG包含多种图形元素,例如`<rect>`(矩形)、`<circle>`(圆形)、`...
为了实现更高级的功能,如定位、动画效果和交互性,可以借助CSS3和JavaScript库,如Popper.js或Tippy.js,它们能帮助我们轻松地创建高性能、高度自定义的提示效果,并与SVG元素完美集成。 总结,SVG添加提示信息...
SVG元素是构建这些图形的基本构造块,它们分为多种类型,包括图形元素、容器元素、图形引用元素、文本内容元素以及SVG文档片断。 1. **图形元素**: - **矩形**:使用`<rect>`元素创建,如`...
### SVG元素详解 #### 1. 元素模块概述 SVG(Scalable Vector Graphics)是一种基于XML的矢量图像格式,它不仅支持矢量图形的创建和展示,还提供了丰富的交互性和动态特性。SVG中的元素是其核心组成部分,通过这些...
这是因为SVG元素也是DOM树的一部分,当SVG嵌入HTML时,SVG的DOM节点成为HTML DOM树的子节点。 2. **事件监听**:SVG和HTML都可以监听并响应对方的事件。例如,HTML中的按钮点击可以触发SVG图形的变化,而SVG中的...
这篇文章“SVG 画动态线 实例”可能探讨了如何使用SVG元素和JavaScript来创建动态的线条动画。SVG提供了多种绘制线条的元素,如`<line>`、`<path>`或者`<polyline>`,每种都有其特定的应用场景。 1. `<line>`元素:...
下面将详细介绍SVG的基本概念、创建SVG元素的方法、SVG的鼠标事件处理以及可能在压缩包中的SVG热点示例。 1. SVG基本概念: SVG是一种开放标准的图形格式,由万维网联盟(W3C)维护。它支持动态和交互式的图形,...
1. **气泡生成**:使用JavaScript动态创建SVG元素,例如`<circle>`标签,设置其初始坐标、半径、颜色等属性,以创建出气泡的基本形状。 2. **气泡动画**:通过修改SVG元素的`transform`属性,实现气泡的平移效果,...
在"html5各种svg元素炫酷弹性动画特效"这个项目中,开发者利用SVG的特性,结合HTML5的Canvas和JavaScript,打造了一系列富有创意的动态效果。以下是这9种效果的详细介绍: 1. **button.html**:这是一个基于SVG的...