vue使用svg文件补充-svg放大缩小操作(使用d3.js)

作者:Miss.lang 时间:2023-06-30 16:23:31 

前言

项目需求是要引入svg文件,然后对里面的元素进行赋值,完了之后还要能够让svg放大缩小,点击查看全屏。针对上一篇文章,进行对svg文件里面的元素进行赋值和放大缩小的补充笔记

svg元素赋值

1. 先看看svg文件的代码

vue使用svg文件补充-svg放大缩小操作(使用d3.js)

思路:我的想法就是循环拿到里面的id,然后跟后台的数据匹配,然后赋值。因为后台返回的数据id是没有后面的_C和_V 的。所以需要我前端的处理。

2. 前端js代码:


onWinResize(item) { // item是后台返回的数据,我数据处理函数是单独写的,没有放在接口请求后面
     var svg = document.getElementById('svgcanvas'); // svg 的id
     var arrText = [];
     var arrRect = []; //这两个是我们要赋值和要改变颜色的数组
     for (var i = 0; i < svg.childNodes.length; i++) {
       var child = svg.childNodes[i]; // 循环svg里面的元素
       if (child.tagName == 'g' && child.id != null && child.id.length > 0) { // 找到g元素,然后循环g里面的元素。(如果你的svg里面没有用g元素包裹你的text、line、rect等元素的话,那你直接跳过这一步,走下一步就好了)
         var childG = child.childNodes;
         for (var k = 0; k < childG.length; k++) { // 循环g里面的元素
           if (childG[k].tagName == 'text' && childG[k].id != null && childG[k].id.length > 0) {
             arrText.push(childG[k].id); //拿到后台返回的text的id
           } else if (childG[k].tagName == 'rect' && childG[k].id != null && childG[k].id.length > 0) {
             arrRect.push(childG[k].id); //拿到后台返回的rect的id
           }
         }
       }
     }
     //循环后台返回的数据,与拿到的svg里面的元素id进行匹配
     for (let j = 0; j < item.length; j++) {
       var eltext = item[j].SvgPtID + '_V';
       var elrect = item[j].SvgPtID + '_C';
       arrText.forEach(i => {
         if (eltext == i) {
           var el = document.getElementById(eltext);
           el.innerHTML = item[j].YCValue; //赋值
           el.attributes.fill.value = '#000';
         }
       })
       arrRect.forEach(v => {
         if (elrect == v) {
           $('#' + elrect).css('fill', '#7ab900') // 改变颜色(记得要安装jQuery插件,引入jQuery)
         }
       })
     }
   },

3.附上效果图

vue使用svg文件补充-svg放大缩小操作(使用d3.js)

放大缩小

这个也是折腾了一波,才做出来的。主要svg文件的操作,貌似做的不多,基本都是svg简单的icon或者img的使用。也是百度看了好多才找到d3这个插件的。

D3.js堪称SVG中的jQuery,让SVG图操作起来更加灵活,更加方便调试。反正就是爱了,爱了。

简单的介绍一下d3.js

D3js 是一个可以基于数据来操作文档的 JavaScript 库。可以帮助你使用 HTML, CSS, SVG 以及 Canvas 来展示数据。D3 遵循现有的 Web 标准,可以不需要其他任何框架独立运行在现代浏览器中,它结合强大的可视化组件来驱动 DOM 操作。

D3 可以将数据绑定到 DOM 上,然后根据数据来计算对应 DOM 的属性值。例如你可以根据一组数据生成一个表格。或者也可以生成一个可以过渡和交互的 SVG 图形。

D3 不是一个框架,因此也没有操作上的限制。没有框架的限制带来的好处就是你可以完全按照自己的意愿来表达数据,而不是受限于条条框框,非常灵活。D3 的运行速度很快,支持大数据集和动态交互以及动画。

此处应附上官网地址:https://www.d3js.org.cn/

想要多了解和学习的可以去看看,很容易理解。

来源:https://blog.csdn.net/weixin_42118466/article/details/105861325

标签:vue,svg,d3.js
0
投稿

猜你喜欢

  • django+echart绘制曲线图的方法示例

    2023-04-22 20:56:52
  • 关于Python中的if __name__ == __main__详情

    2022-05-04 10:16:28
  • 深入理解NumPy简明教程---数组3(组合)

    2023-07-15 06:22:39
  • 详解python数组中的符号...与:符号的不同之处

    2022-10-14 19:12:37
  • hadoop二次排序的原理和实现方法

    2023-01-16 22:42:31
  • 利用Python复制文件的9种方法总结

    2022-06-25 15:00:27
  • Pycharm以root权限运行脚本的方法

    2022-03-16 12:23:51
  • python记录程序运行时间的三种方法

    2023-08-25 03:12:19
  • python进行图像边缘检测的详细教程

    2023-08-10 04:53:40
  • 使用Python完成SAP客户端的打开和系统登陆功能

    2021-02-28 17:12:29
  • js 数组随机字符串(广告不重复)

    2024-04-18 09:37:20
  • ts封装axios最佳实践示例详解

    2024-04-19 09:59:07
  • MYSQL大表加索引的实现

    2024-01-16 03:12:36
  • Python实现简易五子棋游戏

    2023-02-04 07:02:22
  • 提升Python运行速度的5个小技巧

    2021-07-28 20:25:24
  • CentOS7.4 源码安装MySQL8.0的教程详解

    2024-01-20 01:44:47
  • Python实现爬虫设置代理IP和伪装成浏览器的方法分享

    2021-05-26 19:42:29
  • .NET中书写XML的一种简单方法

    2007-08-23 12:55:00
  • 提高python代码可读性利器pycodestyle使用详解

    2023-09-04 11:22:04
  • 类型为search的input及相关属性

    2009-02-11 12:49:00
  • asp之家 网络编程 m.aspxhome.com