`

动态创建SVG元素

    博客分类:
  • ajax
阅读更多
当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
0
0
分享到:
评论
1 楼 尼古拉斯阿俊 2016-03-22  

相关推荐

    svg与javascript的交互实例教程

    4. **动态创建SVG**:JavaScript还可以在运行时动态创建SVG元素,这在构建数据可视化或复杂交互效果时非常有用。 5. **SMIL动画**:SVG包含一套内置的Simple Animation(SMIL)功能,可以让元素在时间轴上移动、...

    svg通用操作javascript

    JavaScript可以动态创建SVG元素,如`&lt;rect&gt;`、`&lt;circle&gt;`、`&lt;path&gt;`等,并将其插入到DOM树中。例如,通过`document.createElementNS()`方法创建SVG元素,然后使用`appendChild()`或`insertBefore()`方法添加到指定...

    svg 的一个实例 JavaScript+html

    - 动态生成SVG元素:通过JavaScript动态创建SVG元素,可以灵活地在页面加载后添加图形。 - 图形动画:利用`requestAnimationFrame`和属性变化来实现平滑的SVG动画效果。 - 图形交互:绑定事件监听器,响应用户的点击...

    vue动态渲染svg、添加点击事件的实现

    在Vue项目中动态渲染SVG并在SVG元素上添加点击事件是一个高级功能,它要求开发者对Vue的组件系统、虚拟DOM以及事件处理有深入理解。通过上述步骤和注意事项的介绍,我们可以更好地掌握如何在Vue中实现这一功能。此外...

    遍历SVG元素属性

    总之,SVG元素属性是创建和控制矢量图形的核心部分。理解并熟练掌握这些属性及其遍历方法,对于任何希望在Web或应用程序中使用SVG图形的开发者来说都至关重要。通过博文中的实例和`attributes.svg`文件,我们可以...

    TweenMax.js+svg实现的星空中飞船火箭动画效果源码.zip

    1. **创建SVG元素**:使用HTML或JavaScript动态创建SVG元素,如`&lt;svg&gt;`、`&lt;circle&gt;`(表示星星)、`&lt;polygon&gt;`或`&lt;path&gt;`(表示飞船)。 2. **初始化位置**:设置飞船和星星的初始位置。 3. **定义动画**:使用...

    html2canvas(兼容截图svg元素)

    当HTML页面中含有SVG元素,如使用`jsPlumb`创建的流程图,`html2canvas`在截图时可能会出现不完整或者丢失的情况,特别是连线等动态元素往往无法正确捕获。 为了解决这个问题,我们可以引入`canvg`库。`canvg`是一...

    HTML5 svg实现逼真的陨石流星坠落动画特效源码.zip

    5. **DOM操作**:JavaScript可以用来动态创建SVG元素,比如每颗流星都是一个独立的SVG对象。在流星坠落后,可能需要将其从DOM树中移除,或者改变其样式表示已消失。 6. **性能优化**:由于大量流星可能同时出现,...

    SVG整体缩放拖动创建元素.rar

    通过JavaScript,我们可以动态地创建、修改SVG元素。使用`document.createElementNS()`方法可以创建新的SVG元素,然后使用`appendChild()`将其添加到SVG文档中。还可以通过`setAttribute()`来设置元素的属性,如...

    高性能HTML和SVG元素拖拽js插件plain-draggable

    总结,plain-draggable是一款强大的HTML和SVG元素拖放插件,它以其高性能、易用性和广泛的兼容性,成为开发者构建动态交互界面的理想工具。结合HTML5库和其他前端技术,可以构建出更丰富、更具有吸引力的Web应用。

    PyPI 官网下载 | svgling-0.1.tar.gz

    1. 动态生成SVG图像:根据程序逻辑动态创建SVG元素,构建复杂的矢量图形。 2. SVG文件解析:读取SVG文件,将其内容转换为Python对象,方便进一步处理。 3. SVG文件合并与分割:将多个SVG文件整合到一起,或者从大...

    svg小例子(主要是鼠标事件)

    在本压缩包文件中,我们看到的是关于SVG元素与鼠标事件的一些简单实例,这对于初学者来说是很好的学习资源。 首先,我们要理解SVG中的基本元素。SVG包含多种图形元素,例如`&lt;rect&gt;`(矩形)、`&lt;circle&gt;`(圆形)、`...

    svg添加不同效果的提示信息

    为了实现更高级的功能,如定位、动画效果和交互性,可以借助CSS3和JavaScript库,如Popper.js或Tippy.js,它们能帮助我们轻松地创建高性能、高度自定义的提示效果,并与SVG元素完美集成。 总结,SVG添加提示信息...

    SVG元素和代码解释

    SVG元素是构建这些图形的基本构造块,它们分为多种类型,包括图形元素、容器元素、图形引用元素、文本内容元素以及SVG文档片断。 1. **图形元素**: - **矩形**:使用`&lt;rect&gt;`元素创建,如`...

    SVG元素avg elements

    ### SVG元素详解 #### 1. 元素模块概述 SVG(Scalable Vector Graphics)是一种基于XML的矢量图像格式,它不仅支持矢量图形的创建和展示,还提供了丰富的交互性和动态特性。SVG中的元素是其核心组成部分,通过这些...

    SVG与html的交互(svg的js与html的js互调用)

    这是因为SVG元素也是DOM树的一部分,当SVG嵌入HTML时,SVG的DOM节点成为HTML DOM树的子节点。 2. **事件监听**:SVG和HTML都可以监听并响应对方的事件。例如,HTML中的按钮点击可以触发SVG图形的变化,而SVG中的...

    SVG 画动态线 实例

    这篇文章“SVG 画动态线 实例”可能探讨了如何使用SVG元素和JavaScript来创建动态的线条动画。SVG提供了多种绘制线条的元素,如`&lt;line&gt;`、`&lt;path&gt;`或者`&lt;polyline&gt;`,每种都有其特定的应用场景。 1. `&lt;line&gt;`元素:...

    SVG Demo.rar

    下面将详细介绍SVG的基本概念、创建SVG元素的方法、SVG的鼠标事件处理以及可能在压缩包中的SVG热点示例。 1. SVG基本概念: SVG是一种开放标准的图形格式,由万维网联盟(W3C)维护。它支持动态和交互式的图形,...

    页面气泡特效

    1. **气泡生成**:使用JavaScript动态创建SVG元素,例如`&lt;circle&gt;`标签,设置其初始坐标、半径、颜色等属性,以创建出气泡的基本形状。 2. **气泡动画**:通过修改SVG元素的`transform`属性,实现气泡的平移效果,...

    html5各种svg元素炫酷弹性动画特效

    在"html5各种svg元素炫酷弹性动画特效"这个项目中,开发者利用SVG的特性,结合HTML5的Canvas和JavaScript,打造了一系列富有创意的动态效果。以下是这9种效果的详细介绍: 1. **button.html**:这是一个基于SVG的...

Global site tag (gtag.js) - Google Analytics