Vue中动态加载SVG文件并绑定事件、修改节点数据

网友投稿 307 2022-11-17

Vue中动态加载SVG文件并绑定事件、修改节点数据

大致的流程是这样的:实现这个需求是首先通过一个工具(drawio)去自定义绘制图形,然后导出一个svg格式的文件,后端搞了一下drawio工具的源码,在导出的时候,为绘制的图形上每个节点都去绑定了一个id(具体是怎么搞得我一个前端也不是太清楚),最后导出,然后前端需要去加载svg,然后每个节点都会有对应的数据(就是根据绑定的id去获取),然后有些节点上还可能有图片,还需要替换,还可能为每个节点去绑定事件做一些事情。然后还使用了d3实现了让svg可以缩放拖拽。大概是这个亚子

先上一张自己测试用的svg

首先说下思路:

1. 首先咱们要通过XMLHttpRequest的方式去加载svg,因为这样才能去操作svg中的dom元素

2. 接下来就是拿到里面的dom元素集合,遍历为某些节点(当然也可以为整个svg)绑定事件,注意:这里绑定的事件是在window层上,我们要向window上挂载绑定的方法

3. 然后就可以把svg挂载到容器dom上,这里注意:不能通过DOM.appendChild的方式去追加,要先转成虚拟dom并挂载,否则绑定的事件失效

4. 挂载dom上之后就能看到正常的我们加上绑定事件的svg了,这时候也在dom上了,咱们可以去获取里面的dom,循环遍历去获取每个节点的id,并找到里面对应的font标签并将其数据进行修改,除了font标签外、如果有图片还会有image标签

然后下面是完整的代码,代码注释还是蛮详细的,希望可以帮到大家

最后是搞完之后的效果:

补充:

上面代码通过

var Profile = Vue.extend({ template: "

" + sXML + '
'});// 创建实例,并挂载到元素上new Profile().$mount('#svgTemplate');

这个方式去挂载,如果使用错误警告或者有问题可以看下我上篇博文:

​​【解决】You are using the runtime-only build of Vue where the template compiler is not available​​

上面使用了d3,记得npm 装一下呢

npm install d3

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于FPGA的USB3.0 HUB设计方案
下一篇:Java中try catch处理异常示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~