vue项目使用svg实现一个物体沿着线条实时运动;svg图像放大缩小;svg中的文字居中显示

news2024/11/26 4:47:27

效果如上

html部分

<svg width="500px" height="500px" viewBox="0 0 400 400">
              <!-- 绘制连线 -->
              <template v-for="(point, index) in points">
                <line :x1="point.x" :y1="point.y" :x2="index - 1 > 0 || index - 1 == 0 ? points[index - 1].x : point.x"
                  :y2="index - 1 > 0 || index - 1 == 0 ? points[index - 1].y : point.y" stroke="#1677ee" stroke-width="4"
                  key="index" />
                <circle :cx="point.x" :cy="point.y" r="8" :fill="point.pointColor" key="index"
                  @click="getSiteDetails(point)" v-if="point.siteType != 'end'" />
                <text :x="point.x" :y="point.y" fill="#fff" text-anchor="top" v-if="point.siteType != 'end'">{{ index + 1
                }}</text>
                <image xlink:href="../../../../assets/img/robot.png" height="25px" width="25px" :x="robotPos"
                  :y="robotPosY"></image>
              </template>
</svg>

重点解释一下:
1.svg中的:width、height是整画布的大小;viewBox是视野的值(个人这么理解,可以通过改变其中的值越大 整个svg中的内容越小反之亦然) 

2.这个图中的线段和圆形都是svg中的line和circle,根据后台中返回的数据实时生成的,所有使用了template遍历数据

3.其中的层级关系 谁在后面谁的层级越高(目前的文字越高)

4.其中引入的图片 路径需要上述的xlink:href引入

5.想要文字在圆形中居中可以设置 text-anchor="middle" alignment-baseline="middle"这俩个属性

 <text x="200" y="200" text-anchor="middle" alignment-baseline="middle" fill="black" font-size="16px">
    Your Text Here
  </text>

回到那个页面中的js部分:其中这里是使用websocket实时发心跳,updateWorkStatus里就是反馈的实时数据

难点就是在于那个坡度的地方,需要沿着坡度去走,那么图片的y轴距离如何得出就是一个问题

(robotPos ,robotPosY

整体的思路下面是实现方式: 

 //图片的实时状态
    updateWorkStatus(v) {
      this.robotPos = v.pos * 10
      this.robotState = v.state
      this.robotDir = v.dir
      if (this.robotPos > this.upOpint.x && this.robotPos < this.downOpint.x) {
        let lineLength = this.calculateHypotenuse((this.downOpint.x - this.upOpint.x), (this.upOpint.y - this.downOpint.y)) / (this.robotPos - this.upOpint.x)
        this.robotPosY = 200 - (this.downOpint.y / lineLength) * 4
      } else if (this.robotPos < this.upOpint.x) {
        this.robotPosY = 200
      } else if (this.robotPos > this.downOpint.x || this.robotPos == this.downOpint.x) {
        this.robotPosY = 100
      }
      //机器人路过的点没有异常时候点变成绿色
      this.points.forEach(item => {
        //机器人的方向去判断
        if (this.robotDir == 1) {
          if (this.robotPos > item.pos * 10 || this.robotPos == item.pos * 10) {
            item.pointColor = '#23A459'
          }
        } else if (this.robotDir == 2) {
          if (this.robotPos < item.pos * 10) {
            item.pointColor = '#23A459'
          }
        }

      })
    },
    //a直角边a的长度 b直角边b的长度
    calculateHypotenuse(a, b) {
      var c = Math.sqrt(a * a + b * b);
      return c;
    },

站点折线数据加工:

 // 获取站点初始化
    setStaionList() {
      if (this.uniqueid) {
        initializeSiteList(this.uniqueid).then(res => {
          let data = res.data.data
          data.forEach(item => {
            if (item.siteType == 'down') {
              item.x = item.pos * 10
              item.y = 100
              item.pointColor = '#1677ee'
              this.downOpint = {
                x: item.pos * 10,
                y: 100
              }
            } else if (item.siteType == 'end') {
              item.x = item.pos * 10
              item.y = 100
              item.pointColor = '#1677ee'
            } else if (item.siteType == 'up') {
              item.x = item.pos * 10
              item.y = 200
              item.pointColor = '#1677ee'
              this.upOpint = {
                x: item.pos * 10,
                y: 200
              }
            } else {
              item.x = item.pos * 10
              item.y = 200
              item.pointColor = '#1677ee'
              this.robotPosY = 200
            }

          })
          this.points = data
        })
      }
    },

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/949182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

联邦学习FedAvg-基于去中心化数据的深度网络高效通信学习

随着计算机算力的提升&#xff0c;机器学习作为海量数据的分析处理技术&#xff0c;已经广泛服务于人类社会。 然而&#xff0c;机器学习技术的发展过程中面临两大挑战&#xff1a;一是数据安全难以得到保障&#xff0c;隐私泄露问题亟待解决&#xff1b;二是网络安全隔离和行业…

【HCIP】18.防火墙

区域隔离&#xff0c;以防火墙的接口为中心定义区域&#xff0c;在防火墙中不同区域互访使用策略来进行控制 NGFW&#xff0c;下一代防火墙&#xff0c;除了是否对他通过进行判断&#xff0c;也可以对安全进行判断&#xff08;例如是否是病毒&#xff0c;DDOS攻击&#xff09;…

常见的下载方式

一. 使用 window.open() 使用场景 // 1. 先封装一个实习下载的函数 export const download (path) > {window.open(下载的接口&#xff0c;例如&#xff1a;/fs/download?path path) } // 2. 使用&#xff1a;在需要下载的地方调用download函数&#xff0c;传入下载的u…

Data Rescue Professional for Mac:专业的数据恢复工具

在数字化时代&#xff0c;我们的生活和工作离不开电脑和存储设备。但是&#xff0c;意外情况时常发生&#xff0c;例如误删除文件、格式化硬盘、病毒攻击等&#xff0c;这些都可能导致重要的数据丢失。面对数据丢失&#xff0c;我们迫切需要一款可靠的数据恢复工具。今天&#…

ASEMI整流桥GBU816的原理和应用

编辑-Z 摘要&#xff1a;整流桥GBU816是一种用于将交流电转换为直流电的电子元器件。本文将从原理、结构、应用以及优点等四个方面对整流桥GBU816进行详细的阐述。 1、整流桥GBU816的原理 整流桥GBU816由四个二极管组成&#xff0c;分别连接在一个桥形电路中。当输入交流电通…

TikTok选品分析:越南7月家电销量第一,这款吸尘器凭什么?

随着经济发展&#xff0c;人们的生活向智能化、便捷化发展&#xff0c;消费者的消费喜好也随之产生变化。家电也不例外&#xff0c;传统吸尘器因其体积较大、清洁不便正逐渐被淘汰。取而代之的是手持吸尘器&#xff0c;其凭借轻便、多功能的特点迅速赢得消费者的喜爱。 过去一…

腾讯云国际代充-GPU服务器安装驱动教程NVIDIA Tesla

腾讯云国际站GPU 云服务器是基于 GPU 的快速、稳定、弹性的计算服务&#xff0c;主要应用于深度学习训练/推理、图形图像处理以及科学计算等场景。 GPU 云服务器提供和标准腾讯云国际 CVM 云服务器一致的方便快捷的管理方式。 GPU 云服务器通过其强大的快速处理海量数据的计算性…

【Python】利用python-docx生成word版本学生花名册

如图&#xff0c;可以用python创建word文档&#xff0c;生成一个学生的花名册。生成的过程&#xff1a;先下载第三方依赖包&#xff0c;安装依赖包&#xff0c;然后引入依赖文件&#xff0c;创建docx文件&#xff0c;添加标题&#xff0c;创建表头&#xff0c;创建表格正文&…

创作纪念日-我的第1024天

机缘 不知不觉已经成为创作者的第1024天啦… … 刚开始接触博客的初衷就是为了记笔记&#x1f4d2;、记总结&#x1f4dd;&#xff0c;或许对于当时就等同于是为了找工作。坚持学习并持续输出博客一年后&#xff0c;这时我发现再写博客&#xff0c;不在是为了找一份工作&…

比亚迪宋L高调亮相成都车展,媒介盒子多家媒体助阵

哈喽,大家好,今天媒介盒子小编又来跟大家分享媒体推广的干货知识了,本篇分享的主要内容是:比亚迪宋L的营销策略。 比亚迪宋L又于2023年8月25日在成都车展上首次亮相&#xff0c;该车将配备比亚迪黑科技中的CTB技术、云辇-C底盘系统和iTAC系统等&#xff0c;预计将在今年第四季…

python教程:如何写类?

目录标题 前言类的定义知识点扩展&#xff1a;构建和初始化1. __ new__(cls,[…)2. __ init__(self,[…)3. __ del__(self) 尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 类的定义 Python中&#…

正中优配:A股早盘三大股指微涨 华为概念表现活跃

周三&#xff08;8月30日&#xff09;&#xff0c;到上午收盘&#xff0c;三大股指团体收涨。其间上证指数涨0.06%&#xff0c;报3137.72点&#xff1b;深证成指和创业板指别离涨0.33%、0.12%&#xff1b;沪深两市合计成交额6423.91亿元&#xff0c;总体来看&#xff0c;两市个…

一文搞懂CAN和CAN FD总线协议

一、CAN与CAN FD的概念 1、CAN是什么 控制器局域网总线&#xff08;CAN&#xff0c;Controller Area Network&#xff09;是一种用于实时应用的串行通讯协议总线&#xff0c;它可以使用双绞线来传输信号&#xff0c;是世界上应用最广泛的现场总线之一。 CAN协议用于汽车中各种…

正中优配:创业板怎么开通

作为我国资本市场的一个重要组成部分&#xff0c;股票市场一直是出资者追逐高收益的抢手挑选。而近年来&#xff0c;创业板作为我国股票市场上的一颗新星&#xff0c;备受创业者、出资者的关注。但关于一些新手出资者来说&#xff0c;可能对“创业板怎样注册”这个问题还比较陌…

一文看懂开发者需要了解的信创概念

信创这个概念对于大家来说并不陌生&#xff0c;至少我们在海量的新闻中会时不时的听到这个概念&#xff0c;特别是在西方国家对中国进行技术封锁加剧时&#xff0c;证券市场中它还会时不时成为一个风口板块。 其实“信创”理解起来也并不困难&#xff0c;就像它的字面意思&…

手把手教你Jenkins整合Jmeter实现自动化接口测试

01、在机器上安装jmeter 下载&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 这里我用了一台Windows安装jmeter用来写接口测试的脚本&#xff0c;启动前修改jmeter.properties 中 jmeter.save.saveservice.output_format值为xml。 编写接口测试脚本&#xff1a; …

外贸软件鞋类行业管理难点及解决方案

鞋子作为一种常见的商品&#xff0c;在出口外贸中占据着重要的地位。近几年&#xff0c;随着我国经济的建设步伐的不断加快&#xff0c;对外贸易活跃度也随之得以提升&#xff0c;中产阶层的消费人群及需求量都在不断增长&#xff0c;其中鞋业也经历了急剧的发展&#xff0c;成…

汽车自适应巡航系统控制策略研究

目 录 第一章 绪论 .............................................................................................................................. 1 1.1 研究背景及意义 ..........................................................................................…

C# 如何将使用的Dll嵌入到.exe应用程序中?

文章目录 前言详细实操简要步骤 前言 有没有想自己开发的exe保留一点神秘&#xff0c;不想让他人知道软件使用了哪些dll; 又或许是客户觉得一个软件里面的dll文件太多了&#xff0c;能不能简单一点&#xff0c;直接双击.exe就可以直接运行了&#xff0c;别搞那么多乱七八糟的。…

Android开发仿美团购物左右联动列表

概述 Android开发左右联动列表&#xff0c;仿照美团外卖点餐时&#xff0c;左右列表可以联动。 详细 Android开发仿美团购物左右联动列表 概述 左右联动列表是仿照美团外卖点餐时&#xff0c;左右列表可以联动。比如右边列表会有小项对应左边的&#xff0c;滑动时会置顶&a…