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>

添加闪烁动画

这里使用 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…

目录
相关文章
|
机器学习/深度学习 弹性计算 开发者
ModelScope问题之镜像上notebook导入失败如何解决
ModelScope镜像是指用于在ModelScope平台上创建和管理的容器镜像,这些镜像包含用于模型训练和推理的环境和依赖;本合集将说明如何使用ModelScope镜像以及管理镜像的技巧和注意事项。
350 2
水果软件flstudio设置成中文版本的操作步骤
再也用不着给编曲软件FL Studio安装汉化补丁了,今天FL Studio官方不声不响地悄悄更新了FL Studio 20中文版,但一些朋友装完Mac中文版后发现还是英文版,这是怎么回事呢?今天就俩讲一讲正确安装并设置FL中文版的方法。
2144 0
|
前端开发 JavaScript
炫酷动态特效HTML实现源码【完整源码分享】
炫酷动态特效HTML实现源码【完整源码分享】
炫酷动态特效HTML实现源码【完整源码分享】
|
存储 传感器 编解码
3D激光SLAM:LeGO-LOAM论文解读---完整篇
![在这里插入图片描述](https://img-blog.csdnimg.cn/348d0b4467a24296a22413207566c67e.png) 论文的标题是:**LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain** - 标题给出的应用场景是 **可变地形** - 重点是 **轻量级** 并 利用 **地面优化** - 本质依然是一个 **激光雷达里程计和建图**
3D激光SLAM:LeGO-LOAM论文解读---完整篇
|
Web App开发 HTML5 移动开发
谷歌浏览器Chrome播放rtsp视频流解决方案
代码中的具体参数含义,大家可以移步这里: https://wiki.videolan.org/Documentation:WebPlugin/   找半天,HTML5的可以支持RTMP 但是无法播放RTSP,flash也止步于RTMP,最后同事推荐了个开源的好东东 VLC ,请教谷歌大神之后,这货果然可以用来让各浏览器(IE activex方式,谷歌、FF)实现播放RTSP视频流,那真是极好的~~ 废话不多说了附上参考文档和案例,大家自己看吧。
10564 1
|
5月前
|
机器学习/深度学习 人工智能 算法
小米7B参数推理大模型首次开源!Xiaomi MiMo:数学代码双杀,超越32B巨头
小米开源的MiMo推理大模型通过联动预训练与强化学习算法,在7B参数规模下实现数学推理与代码生成能力的突破性提升,技术报告显示其性能超越部分32B级模型。
695 74
小米7B参数推理大模型首次开源!Xiaomi MiMo:数学代码双杀,超越32B巨头
|
12月前
|
计算机视觉 Python
ImageDraw, ImageFont
【9月更文挑战第25天】
254 3
|
存储 缓存 编译器
C语言第四弹---printf和scanf详解
C语言第四弹---printf和scanf详解
|
前端开发 JavaScript API
Github 上 8 个很棒的 React 项目
Github 上 8 个很棒的 React 项目
5341 0
|
11月前
|
JSON 文字识别 小程序
微信小程序OCR插件,实现身份证、行驶证、银行卡、营业执照和驾驶证等识别
微信小程序OCR插件,实现身份证、行驶证、银行卡、营业执照和驾驶证等识别
1404 0