用js动态创建svg

2023-11-13

吃水不忘挖井人
svg基础教程https://www.bilibili.com/video/BV1Pt411y7V6?p=1

要实现的效果
在这里插入图片描述

svg文件的写法:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="400px" height="300px">
  <g style="cursor:pointer">
    <circle cx="200" cy="150" r="40" stroke="#1c82f2" stroke-width="2" fill="#1c82f2" />
    <text x="100" y="107" font-size="14px" fill="#fff" text-anchor="middle">科鲁兹</text>
  </g>
  
  <g style="cursor:pointer">
    <line x1="100" y1="100" x2="200" y2="200" style="stroke:rgb(255,0,0);stroke-width:2"/>
    <rect x="140" y="140" rx="4" ry="4" width="20" height="20"
    style="fill:#0ff;stroke:black;stroke-width:1"/>
	<text x="150" y="157" font-size="14px" fill="black" text-anchor="middle">?</text>
  </g>
  
  <g style="cursor:pointer">
    <circle cx="200" cy="200" r="40" stroke="black" stroke-width="2"  fill="#fff"/>
    <text x="200" y="207" font-size="14px" fill="black" text-anchor="middle">2015</text>
  </g>
  
</svg>

在这里插入图片描述

##js直译

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript"> 
		
		window.onload = function function_name () {
			var svgNS = "http://www.w3.org/2000/svg";
			var oParent = document.getElementById('div1');
			
			var oSvg = document.createElementNS(svgNS,'svg');
			oSvg.setAttribute('xmlns',svgNS);
			oSvg.setAttribute('width','400px'); 
			oSvg.setAttribute('height','300px');
			
			var oG = document.createElementNS(svgNS,'g');
			oG.setAttribute('curosr','pointer');
			
			var oCircle = document.createElementNS(svgNS,'circle');
			oCircle.setAttribute('cx','200');
			oCircle.setAttribute('cy','150');
			oCircle.setAttribute('r','40');
			oCircle.setAttribute('fill','#1c82f2');
			
			var oText = document.createElementNS(svgNS,'text');
			oText.setAttribute('x','100');
			oText.setAttribute('y','100');
			oText.setAttribute('font-size','14px');
			oText.setAttribute('fill','#fff');
			oText.setAttribute('text-anchor','middle');
			oText.innerHTML="科鲁兹";
			
			oG.appendChild(oCircle);
			oG.appendChild(oText);
			oSvg.appendChild(oG);
			oParent.appendChild(oSvg);
	//省略···
		}
		</script>
	</head>
	<body>
	<div id="div1"></div>
	</body>
</html>

##使用封装createTag函数

	var oParent = document.getElementById('div1');
	var svgNS = "http://www.w3.org/2000/svg";	
	
	//使用封装createTag函数			
	function createTag (tag, objAttr) {
		var oTag = document.createElementNS(svgNS,tag);
		for( var attr in objAttr){
			oTag.setAttribute(attr,objAttr[attr]);
		}
		return oTag;
	};
	
	var oSvg = createTag('svg',{'xmlns':'svgNS','width':'400px','height':'300px'});
	var oG = createTag('g',{'curosr':'pointer'});
	var oCircle = createTag('circle',{'cx':'200','cy':'150','r':'40','stroke':'#1c82f2','stroke-width':'2','fill':'#1c82f2'});
	var oText = createTag('text',{'x':'100','y':'100','font-size':'14px','fill':'#fff','text-anchor':'middle'});
	oText.innerHTML="科鲁兹";
	
	oG.appendChild(oCircle);
	oG.appendChild(oText);
	oSvg.appendChild(oG);
	oParent.appendChild(oSvg);

#分离数据

	var oParent = document.getElementById('div1');
	var svgNS = "http://www.w3.org/2000/svg";	
	
	var centerX = oParent.offsetWidth/2;
	var centerY = oParent.offsetHeight/2;
	
	var data = {
		centerNode : { text : "科鲁兹"},    //中心点x=centerX,y=centerY
		otherNode : [
			{x:100,y:100,text:"2015"}
		]
	};
				
	function createTag (tag, objAttr) {
		var oTag = document.createElementNS(svgNS,tag);
		for( var attr in objAttr){
			oTag.setAttribute(attr,objAttr[attr]);
		}
		return oTag;
	};
	
	function centerNode () {
		var oSvg = createTag('svg',{'xmlns':'svgNS','width':'400px','height':'300px'});
		var oG = createTag('g',{'curosr':'pointer'});
		var oCircle = createTag('circle',{'cx':centerX,'cy':centerY,'r':'40','stroke':'#1c82f2','stroke-width':'2','fill':'#1c82f2'});
		var oText = createTag('text',{'x':centerX,'y':centerY+7,'font-size':'14px','fill':'#fff','text-anchor':'middle'});
		oText.innerHTML = data.centerNode.text;
	
		oG.appendChild(oCircle);
		oG.appendChild(oText);
		oSvg.appendChild(oG);
		oParent.appendChild(oSvg);				
	};
	
	function otherNode (data.otherNode[]) {
		//连线和其他圆
	};
	
	centerNode () ; 
	for (var i = 0; i < data.otherNode.length; i++) {
		otherNode (data.otherNode[i]);
	};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用js动态创建svg 的相关文章

  • (无限?)JavaScript 代码中的循环

    我有以下 JavaScript 代码来在网站上 显示 XML function createChild node tabindex var child node childNodes var r var tabs for i 0 i
  • CSS3 矩阵 3d 矩形到梯形的转换

    我正在尝试使用 webkit 对 CSS3 的支持transform matrix3d
  • django 管理站点导航侧边栏搞砸了

    我最近在我的项目中添加了一个包并做了一个pip freeze gt requirements txt然后 然后我做了pip install r requirements txt到我的本地 它添加了一个侧边栏 I did a pip inst
  • 未捕获的类型错误:属性...不是函数 - 页面加载后

    我正在使用对外部 API 的跨域 Ajax 请求 有时它会失败 并显示控制台消息 Uncaught TypeError Property photos of object object DOMWindow is not a function
  • Chrome 扩展 |有什么方法可以让 chrome.storage.local.get() 返回一些东西吗?

    在我的 chrome 扩展中 我需要使用 chrome 存储 在我的后台脚本中 我首先创建一个对象并将其添加到 chrome 存储中 然后我想从那里获取我的对象并返回 像这样的东西 var obj chrome storage local
  • 网格属性不适用于网格容器内的元素

    我正在尝试定位嵌套li ul li ul li 在最顶层创建的 CSS 网格上ul 还没有爱 它不起作用 也许这是不可能的 或者我错过了什么 orgChart ul orgChartLevel1 display grid grid temp
  • 如何让 Rails 资产管道生成源地图?

    我想让 Rails 与编译后的 CoffeeScript 缩小的 JS 一起生成源映射 以便更好地记录错误 不过 网上似乎还没有关于如何执行此操作的全面文档 有人这样做过吗 我使用 Rails 3 2 和 Heroku Rails 支持缩小
  • 创建地图后向 Google 地图 v3 添加标记

    我对使用 Google Maps API 比较陌生 现在我正在开发一个项目 用户可以选择各种搜索过滤器并查看结果自动显示在地图上 而无需重新加载页面 到目前为止 我的方法是创建一个控制地图的 Javascript 对象 以便我可以按照我的意
  • CSS 居中变换

    为什么使用变换居中可以完美地平移并左 50 居中 相对于父级的位置 但右 50 却不能 工作示例 span class icon position absolute top 50 left 50 transform translate 50
  • 如何在 jQuery/javascript 中获取边框宽度

    如何解析边框宽度 style border solid 1px black 在 jQuery javascript 中 elem css border width 不这样做 注意我需要解析 css 的宽度 因为元素可能是display no
  • 对同一域发出 get 请求,出现 CORS 错误

    在浏览器扩展中 这是我的 ajax 调用 var xhr new XMLHttpRequest xhr open GET window location href true xhr responseType arraybuffer xhr
  • 解决多个 jQuery 文件之间的冲突

    我的项目中有多个 jquery 文件 我正在使用jquery1 4 2使用facebox 但我也需要原型和scriptacolous脚本 我用过 jQuery noconflict 在我的代码中 但它不起作用 这是网址http mlep c
  • 不透明div内的透明文本

    我有一个背景图像 上面有一个白色的 div 我希望该 div 内的文本是透明的 以便您可以 透过 背景图像 这有可能吗 应该看起来像这样 您需要将其用于您的文本CSS webkit text fill color transparent
  • Chrome 开发工具中 $() 和 $(this) 显示的 x.fn.x.init[] 值是多少

    我有在一些开发工具中调试 JS 和 jQuery 脚本的习惯 我意识到 Chrome 开发工具将 x fn x init 显示为 和 this 的值 但是我不知道这些价值是什么 Code
  • Firefox 扩展中的 localStorage

    我正在尝试从 Firefox 扩展访问页面的 localStorage 我的理解是content给出了参考window当前页面的 当我尝试访问页面的 localStorage 时content localStorage 我想我正在得到它的参
  • 如何在 vue.js 中使用 SVG.js 插件?

    我在用svg js在我的 Laravel 项目中运行vue js 这就是我使用的方式svg js Step 1 安装svg js作为我的 vue 应用程序中的插件 import svgJs from svg js dist svg expo
  • 让 hashchange 事件在所有浏览器(包括 IE7)中工作

    我有一些代码 由另一位开发人员编写 在 WordPress 内部进行 AJAX 页面加载 例如 没有页面重新加载 当您单击导航项时 AJAX 会刷新主要内容区域 我的问题是它在 IE7 中被破坏了 我不知道从哪里开始调试 最初的开场白是 v
  • 如何在 JavaScript 中将样式属性重置为其 CSS 默认值?

    在 php 生成的页面上有几个这样的元素 td class defaultTDStyle style color userDefinedCustomColor td 因此有一个默认样式 我应用了几个额外的样式来覆盖 CSS 中定义的样式 有
  • vuejs2复制剪贴板问题

    我正在尝试使用https alligator io vuejs vue clipboard copy https alligator io vuejs vue clipboard copy 对于 Vue js 中的复制剪贴板功能 它对于字符
  • 使用node.js/Express从HTTP重定向到HTTPS

    有什么方法可以更改我的 Web 应用程序以侦听 HTTPS 而不是 HTTP 我正在使用node js express 我需要它来侦听 HTTPS 因为我正在使用地理定位 而 Chrome 不再支持地理定位 除非从 HTTPS 等安全上下文

随机推荐

  • 机器学习之朴素贝叶斯

    朴素贝叶斯 贝叶斯法则 条件独立 如果P X Y Z P X Z P Y Z 或等价地P X Y Z P X Z 则称事件X Y对于给定事件Z是条件独立的 也就是说 当Z发生时 X发生与否与Y发生与否是无关的 朴素贝叶斯 假设每个输入变量独
  • Qt + OpenGL 教程(六):旋转的几种方法(自动旋转、键盘控制、鼠标控制旋转)

    总结了几种旋转的方法 自动旋转 利用计时器 每隔一段时间重新绘制屏幕 实现旋转 键盘控制 点击某个按键 旋转某一角度 鼠标控制 围绕y轴 跟随鼠标旋转 目前只是围绕y轴旋转 不能按任意轴旋转 代码分别为 以后补充
  • ORB_SLAM2 源码解析 特征匹配 (五)

    目录 一 单目初始化中的特征匹配SearchForInitialization 二 跟踪 TrackwithModel TrackReferenceKeyFrame 三 词袋介绍BoW 1 直观理解词袋 2 词袋基本思想 3 从字典结构到k
  • 使用D3.js实现框选节点并进行多节点拖动

    最近再使用d3 js关系图形展示时 需要选中多节点并进行拖动 一开始并不知道D3提供了此API 下面是我结合项目业务整理的框选操作的重点方面的应用 这是d3提供的api 使用鼠标或触摸选择一维或二维区域 可参考示例 https blockb
  • Unity 使用 Dotween 的 Sequence 制作UI动画并且可重复利用

    目录 前言 一 DOTween是什么 二 使用步骤 1 导入DOTween 2 配置DOTween 3 使用代码编写动画 4 代码API解释 总结 前言 DOTween可以制作简易的UI动画 避免创建大量的Animator 本篇文章介绍一下
  • Spring Boot + k8s 最佳实践

    前言 K8s Spring Boot实现零宕机发布 健康检查 滚动更新 优雅停机 弹性伸缩 Prometheus监控 配置分离 镜像复用 配置 健康检查 健康检查类型 就绪探针 readiness 存活探针 liveness 探针类型 ex
  • 书店管理系统

    设计一个书店管理系统 能完成书店的日常管理工作 要求完成的基本功能 1 进货入库记录 2 销售出货记录 3 图书信息查询 可通过书名 作者等途径查询某本图书的详细信息 含书名 作者 出版社 页数 最新入库时间 库存量 价格等 4 自动预警提
  • 时间和日期

    Boost使用的timer和data timerj进行对应和时间日期相关的出来文档 timer包含三个组件 分别为timer progress timer以及对应的progress display timer timer可以测量运行时间 t
  • ROS系统基本功能的使用详解(基本指令/节点/服务/启动文件/动态参数)

    ROS系统基本功能的使用详解 一 创建工作空间 二 创建与编译ROS功能包 三 ROS的基本命令 3 1 节点 3 2 主题 3 3 服务 3 4 参数服务器 四 节点的创建与运行 4 1 创建源文件 4 2 修改CMakeLists tx
  • 域名+七牛云+PicGo+pypora

    域名 七牛云 PicGo pypora 前提准备 域名 自己的域名 七牛云 免费注册申请10G空间够用 picGo 地址 pypora 自行下载 GO 七牛云 注册 gt 登录 gt 控制台 找到对象存储 新建自己空间 绑定域名 添加域名自
  • STM32使用SPI通信驱动2.4G无线射频模块发送数据

    目录 SPI介绍 SPI接口原理 SPI工作原理 SPI特征 引脚配置 结构体 库函数 SPI配置过程 SPI h SPI c NRF24L01无线射频模块 NRF24L01厂家驱动代码移植 NRF24L01 h NRF24L01 c ma
  • 分析一个别人的qt+opengl例子

    Qt5 OpenGL学习笔记 用Qt封装的QOpenGL系列绘制有颜色有深度的三角形 最近学习OpenGL 虽然说Qt可以使用原生OpenGL的API 但是Qt也提供了封装的QOpenGL系列 我用原生的和封装的分别实现了一次简单渲染 都是
  • 竞赛 基于卷积神经网络的乳腺癌分类 深度学习 医学图像

    文章目录 1 前言 2 前言 3 数据集 3 1 良性样本 3 2 病变样本 4 开发环境 5 代码实现 5 1 实现流程 5 2 部分代码实现 5 2 1 导入库 5 2 2 图像加载 5 2 3 标记 5 2 4 分组 5 2 5 构建
  • Python Web系列学习2-Django

    1 django admin Django项目管理工具 建立一个Django项目用 django admin startproject xxx 生成的站点目录结构为 2 进入站点目录 建立一个应用 python manage py star
  • Qt基础篇:Qt读取路径下所有文件或指定类型文件(含递归、判断是否为空、创建路径)

    文件路径的拆解 QFileInfo fileinfo QString file full ui gt m AlgorithmFilePathLineEdit gt text qDebug lt lt file full 输出1 filein
  • Java框架体系架构的知识,分享一点面试小经验

    前言 当前我们都会说SpringBoot是Spring框架对 约定优先于配置理念的最佳实践的产物 一个典型的SpringBoot应用本质上其实就是一个基于Spring框架的应用 而如果大家对Spring框架已经了如指掌 那么 在我们一步步揭
  • Python实现截图——附完整源码

    Python实现截图 附完整源码 为了能在日常工作中方便地截取并保存屏幕截图 我们可以利用Python编写一段代码实现这个功能 本文将介绍基于Windows平台下的Python截图实现方法 包括如何使用Python的Pillow模块以及py
  • YOLO8添加facial landmark和Head Pose的评价逻辑

    目录 TOC 目录 前言 一 如何在val py中添加NME的逻辑 二 在val py中添加Angle Eorror的逻辑 1 引入库 三 将AFLW2000转为yolo格式 1 参考ultralyticsFaceMark process3
  • JAVA开发环境JDK安装及配置

    一 安装JDK 获取JDK的安装包 1 通过官网下载 2 打开安装包 开始安装JDK和JRE 1 打开JDK安装包 2 点击下一步开始JDK安装 3 更改安装路径 接下来以我的电脑为例安装到E盘 其他盘同理 4 将文件夹路径改到E盘新建的文
  • 用js动态创建svg

    吃水不忘挖井人 svg基础教程https www bilibili com video BV1Pt411y7V6 p 1 要实现的效果 svg文件的写法