svg图的操作和拖动


  • 本次将说明如何在项目中使用SVG图,并做一些简单的操作等,毕竟SVG图相对于图片具有可操作性,对图像进行放大不会失真。

  • SVG是一种可缩放矢量图形(英语:Scalable Vector Graphics,SVG)是基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式。SVG由W3C制定,是一个开放标准。简单的理解,它是图形的另一种格式例如它和常见的图片格式.png、.jpg、.gif等是一类。

SVG 有如下特点:
SVG 绘制的是矢量图,因此对图像进行放大不会失真。
基于 XML,可以为每个元素添加 JavaScript 事件处理器。
每个图形均视为对象,更改对象的属性,图形也会改变。**

SVG 画布的预定义元素里,有六种基本图形跟一种比较特殊,也是功能最强的元素:
六种基本图形:
矩形
圆形
椭圆
线段
折线
多边形
特殊元素:
路径

1. 在项目中使用SVG图

1.1 安装

// npm
npm install @svgdotjs/svg.js
// yarn
yarn add @svgdotjs/svg.js

1.2 在项目中引入

import { SVG } from '@svgdotjs/svg.js'

1.3 渲染准备好的SVG图

<div class="map"></div>

// 渲染SVG图
    initMap () {
      // 获取准备好的预设区域
      const dom = document.querySelector('.map')
      dom.innerHTML = ''
      // 对SVG图进行异步渲染
      return new Promise((resolve, reject) => {
        const draw = SVG()
          .addTo('.map') // 要渲染的区域
          .size('100%', '100%') // 大小
          .scale(1, 1) // 比例
        axios.get(
            require('SVG图片路径')
          )
          .then((res) => {
            draw.svg(res.data)
            resolve('success')
            this.dealMap() // 操作SVG图
          })
      })
    },

1.4 操作SVG图

  • 其实操作SVG图跟操作原生dom类似,不过一个是xml一个是html,不过操作起来还是有一点区别
    // 操作svg
    dealMap () {
      // 给所有高亮的图层加点击
      // 获取SVG图所有点位
      const addSvg = document.querySelector('.map').querySelectorAll('g')
      Array.from(addSvg).forEach((x) => {
        // 给所有点位加上鼠标经过小手样式
        x.style.cursor = 'pointer'
        // 给所有点位加上点击事件
        x.addEventListener('click', (e) => {
        })
      })
    },
  • 以上可以看到其实跟原生dom操作是一样的,但下面就有不一样的了
// 改变颜色
x.fill = 'pink'
// 改变 圆形 <circle> 的大小
x.r = 50 // 50是圆的半径   注意不需要加px

2. 拖拽指令

<div class="map" v-drag  ></div>

  // 拖拽
  directives: {
    drag: function (el, binding) {
      const dragBox = el // 获取当前元素
      dragBox.onmousedown = (e) => {
        e.preventDefault()
        // 算出鼠标相对元素的位置
        const disX = e.clientX - dragBox.offsetLeft
        const disY = e.clientY - dragBox.offsetTop
        document.onmousemove = (e) => {
          // 用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
          e.preventDefault()
          const left = e.clientX - disX
          const top = e.clientY - disY
          // 移动当前元素
          dragBox.style.left = left + 'px'
          dragBox.style.top = top + 'px'        }
        document.onmouseup = (e) => {
          e.preventDefault()
          // 鼠标弹起来的时候不再移动
          document.onmousemove = null
          // 预防鼠标弹起来后还会循环(即预防鼠标放上去的时候还会移动)
          document.onmouseup = null
        }
      }
    }
  }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: svg拖拽缩放.zip是一个压缩文件,其中包含了一些用于实现SVG拖拽和缩放的文件和代码。 SVG是一种用于描述二维矢量形的XML格式,可以在网页上显示出高质量的像。拖拽和缩放是一些常见的交互性功能,能够增强SVG形的用户体验。 这个压缩文件中可能包含了一些JavaScript代码文件,这些代码通过控制鼠标事件来实现SVG形的拖拽和缩放功能。可能会有一个HTML文件,其中包含了用于嵌入SVG形,并与JavaScript代码进行交互的代码。还可能包含一些CSS文件,用于样式化SVG形。 通过使用这些文件和代码,我们可以在网页上显示SVG形,并使其具有拖拽和缩放的功能。用户可以使用鼠标拖拽SVG形,移动到所需的位置。同时,用户还可以使用鼠标滚轮或其他的手势进行缩放操作,以便放大或缩小SVG形。 这些功能能够增加用户与SVG形的互动性,提升用户的体验。这在许多场景中都非常有用,比如在地应用中,用户可以通过拖拽和缩放来浏览地的不同区域;在设计工具中,用户可以通过拖拽和缩放来调整形的位置和大小等。 使用这个压缩文件提供的文件和代码,我们可以方便地实现SVG形的拖拽和缩放,为用户提供更好的用户体验。 ### 回答2: svg拖拽缩放.zip是一个压缩文件,其中包含了用于实现SVG拖拽和缩放功能的相关代码和资源文件。 在现代网页开发中,SVG(可缩放矢量形)被广泛应用于形设计和数据可视化领域。通过使用SVG拖拽缩放功能,我们可以实现在网页上对SVG形进行简单的拖拽和缩放操作。 这个压缩文件中可能包含了HTML、CSS和JavaScript等文件,用于实现SVG拖拽和缩放功能的具体代码。通常情况下,这些代码会利用JavaScript的事件监听和DOM操作来实现拖拽和缩放效果。 在实际使用中,我们可以将这些相关文件解压缩并在网页中引入相应的代码文件。然后,根据具体的需求进行配置和定制,以实现自己想要的SVG拖拽和缩放效果。 总而言之,SVG拖拽缩放.zip是一个用于实现SVG拖拽和缩放功能的压缩文件,内含相关代码和资源文件。通过正确使用这些文件,我们可以在网页中实现对SVG形的简单拖拽和缩放操作。 ### 回答3: "svg拖拽缩放.zip" 是一个文件,是一个压缩文件,其中包含了一种使用 SVG(可缩放矢量形)进行拖拽和缩放的示例代码和相关资源。 SVG 是一种用于描述二维矢量形的 XML 格式标准,它可以实现像的放大缩小而不失真,并且可以直接在网页上显示和编辑,因此在 Web 开发中非常常用。而拖拽和缩放是在用户交互中经常使用的功能。 该示例代码和资源文件能够帮助开发者学习如何使用 SVG 实现形的拖拽和缩放功能。通过使用相关的 JavaScript 代码,可以实现通过鼠标拖动形并放置到指定位置的功能,同时也可以通过滚动鼠标滚轮来实现形的缩放操作。 在解压缩并查看该压缩文件后,你将找到一些包含 SVG 形和 JavaScript 代码的文件。这些文件可能包括用于绘制形和定义交互行为的 SVG 标签、包含操作处理函数的 JavaScript 文件等。 通过阅读和理解这些代码,你可以学习到如何在自己的网页或应用程序中实现类似的拖拽和缩放功能。你可以根据自己的需求来修改和定制这些代码,以满足你的具体开发需求。 总之,“svg拖拽缩放.zip” 提供了一个学习如何使用 SVG 实现拖拽和缩放功能的示例代码和资源,对于对 SVG拖拽、缩放功能感兴趣的开发者来说,是一个有价值的资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值