SVG实现流程动态效果

简介: 可以通过 div 的方式 拼凑 一张图,然后 js 代码控制不同的 div 部件进行颜色变化。可以通过 canvas 的方式绘制整张图,然后对画布内的元素进行控制。可以找个第三方库,自定义形状 组合 一张图出来,然后进行控制。可以通过 svg 图的方式展示内容,然后对 svg 中的元素进行控制。


需求介绍: 监控页面在不同的设备上可以看到工艺流程的动态,哪些设备在工作,进行到了哪个环节...

工艺流程静态图如下

image.png


实现思路分析


  1. 可以通过 div 的方式 拼凑 一张图,然后 js 代码控制不同的 div 部件进行颜色变化。
  2. 可以通过 canvas 的方式绘制整张图,然后对画布内的元素进行控制。
  3. 可以找个第三方库,自定义形状 组合 一张图出来,然后进行控制。
  4. 可以通过 svg 图的方式展示内容,然后对 svg 中的元素进行控制。


挨个分析方式的优缺点。


方案1: 前端直接使用 div 方式操作方面很方便,但是渲染大量 dom 元素再加上后期添加交互操作,大量渲染和高频操作 dom 会有性能问题, div 绘制整张图代码量比较大。


方案2: canvas 绘制整张图,没有明显性能问题,通过代码控制的方式对于后期交互操作操作都可以,手动绘制代码量也不少。(可以借助在线工具绘制)


方案3: 第三方库实现方面操作一般更简单一点,需要找合适的库做简单的测试,使用的功能不多,但是引入了大量的库的其他代码。


方案4: svg 绘制整张图,没有明显性能问题,代码控制相对 canvas 更简便一点,手动绘制代码量也不少。(可以借助在线工具绘制 SVG在线编辑器-菜鸟工具

综合分析方案 4 为最优解,也因为刚好找到了一个 svg 在线编辑工具,而且可以转成 svg 源码。


SVG在线工具绘图


使用在线工具绘图后导出来的 svg 源码中的 id 和实际项目中的设备 id 不匹配,这里要一一对应起来。

如:导出来的源码中的 id 是 svg_368 这种方式,项目中的设备 id 为 K1 命名方式,需要把源码中所有id对应成项目(静态图)中的设备 id 号。


<path stroke="#929292" id="svg_368"
            d="m358.403215,185.904032l-10.00328,-0.000005l0,27.490932l68.846232,0l0,19.325309" opacity="0.5"
            fill-opacity="0" stroke-width="0.5" fill="#ffffff" />
复制代码


内容自动缩放显示


1.用 img 标签显示 svg 图片,设备宽高百分百,但是这里无法操作 svg 元素

<div style="border:2px solid green;width:1000px;height:600px;">
  <img src="../img/3.svg" style="width:100%;height:100%;" />
</div>


2.直接把 svg 源码放到 div 中,如下,这里的 svg 图是不会自动缩放的

<div>
  <svg width="580" height="400" style="border:2px solid red;" xmlns="http://www.w3.org/2000/svg">
    ...
  </svg>
</div>


调整一下 svg 的宽高设置方式,使用 viewBox 设置宽高, svg 就可以自动随着 div 大小自动变化了


<div>
  <svg viewBox="0 0 580 400" xmlns="http://www.w3.org/2000/svg">
    ...
  </svg>
</div>


添加闪烁动画

这里使用 CSS3 @keyframes 规则, 改变图形元素的外轮廓。


.svg-stroke-width {
  animation: strokeWidth 3s infinite;
}
@keyframes strokeWidth {
  0% {
    stroke-width: 0.1;
    stroke: #4eb8ff;
  }
  100% {
    stroke-width: 1.6;
    stroke: #4eb8ff;
  }
}


选择元素添加 class 样式即可


document.getElementById(element).classList.add('svg-stroke-width')


功能整合


基于一个输入框和一个按钮,手动操作进行部分设备(只支持 K1,C1,C2,C4,C3,K2)的流程动态效果设置。

image.png


GitHub 源码地址


github.com/gywgithub/e…


参考链接


SVG在线编辑器-菜鸟工具 https://c.runoob.com/more/svgeditor/

developer.mozilla.org/zh-CN/docs/…

developer.mozilla.org/zh-CN/docs/…

developer.mozilla.org/zh-CN/docs/…

www.runoob.com/css3/css3-a…


目录
相关文章
|
存储 前端开发 JavaScript
前端实现俄罗斯方块游戏(内含源码)
前端实现俄罗斯方块游戏(内含源码)
536 2
|
Arthas 监控 Java
阿里arthas(阿尔萨斯)的linux安装和使用
转自https://blog.csdn.net/SDJN_ONE/article/details/123198219
1302 0
阿里arthas(阿尔萨斯)的linux安装和使用
|
数据采集 存储 Go
使用Go语言和chromedp库下载Instagram图片:简易指南
Go语言爬虫示例使用chromedp库下载Instagram图片,关键步骤包括设置代理IP、创建带代理的浏览器上下文及执行任务,如导航至用户页面、截图并存储图片。代码中新增`analyzeAndStoreImage`函数对图片进行分析和分类后存储。注意Instagram的反爬策略可能需要代码适时调整。
256 1
使用Go语言和chromedp库下载Instagram图片:简易指南
|
8月前
|
人工智能 DataWorks 大数据
大数据AI一体化开发再加速:DataWorks 支持GPU类型资源
大数据开发治理平台 DataWorks 的Serverless资源组支持GPU资源类型,以免运维、按需付费、弹性伸缩的Serverless架构,将大数据处理与AI开发能力无缝融合。面向大数据&AI协同开发场景,DataWorks提供了交互式开发和分析工具Notebook。开发者在创建个人开发环境时,可以选择GPU类型的资源作为Notebook运行环境,以支持进行高性能的计算工作。本教程将基于开源多模态大模型Qwen2-VL-2B-Instruct,介绍如何使用 DataWorks Notebook及LLaMA Factory训练框架完成文旅领域大模型的构建。
536 24
|
数据可视化 算法 C++
脑研究、脑网络分析、可视化的工具箱有哪些?
本文列举并简要介绍了用于脑研究、脑网络分析和可视化的多种工具箱,如Brain Connectivity Toolbox、bctpy、人类连接组项目等,为神经科学研究者提供了丰富的分析和可视化大脑网络的工具选择。
1292 2
脑研究、脑网络分析、可视化的工具箱有哪些?
|
12月前
|
消息中间件 分布式计算 Kafka
大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点
大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点
207 0
|
安全 调度 开发者
内核笔记](七)——内核对象(Kernel object)机制
内核笔记](七)——内核对象(Kernel object)机制
1227 0
内核笔记](七)——内核对象(Kernel object)机制
|
数据可视化 安全 Cloud Native
AntV 你的保姆级数据可视化解决方案
AntV 你的保姆级数据可视化解决方案
1227 0
|
小程序 机器人 Python
分享28个VX小程序源码,总有一款适合您
分享28个VX小程序源码,总有一款适合您
522 1
|
小程序 定位技术 Android开发
小程序质量提升丨定位问题解决方案(错误码11)
小程序质量提升丨定位问题解决方案(错误码11)
309 6