1. <div class="div1">
  2.  
  3. <svg id="svg1" xmlns="http://www.w3.org/2000/svg" width="100%" height="500px">
  4.  
  5. </svg>
  6.  
  7. </div>
  8.  
  9.  
  10.  
  11. methods:{
  12.  
  13. svgLoad(){
  14.  
  15. var ming = 'http://www.w3.org/2000/svg';
  16.  
  17. var oSvg = document.getElementById('svg1');
  18.  
  19. var oPolyLine = null;
  20.  
  21. var pointsNum = '';
  22.  
  23. var lineText = null;
  24.  
  25. function createTag(tagName, tagAttr) {
  26.  
  27. let tag = document.createElementNS(ming, tagName);
  28.  
  29. for (var attr in tagAttr) {
  30.  
  31. tag.setAttribute(attr, tagAttr[attr]);
  32.  
  33. }
  34.  
  35. return tag;
  36.  
  37. }
  38.  
  39. var obj = document.querySelectorAll('.div1')[];
  40.  
  41. obj.appendChild(createTag('svg', {
  42.  
  43. 'xmlns': ming
  44.  
  45. }));
  46.  
  47. oSvg.onmousedown = function(ev) {
  48.  
  49. if (!oPolyLine) {
  50.  
  51. oPolyLine = createTag('polyline', {
  52.  
  53. 'fill': 'none',
  54.  
  55. 'stroke': 'red',
  56.  
  57. 'stroke-width': ''
  58.  
  59. });
  60.  
  61. oSvg.appendChild(oPolyLine);
  62.  
  63. }
  64.  
  65. var x = ev.clientX - obj.offsetLeft;
  66.  
  67. var y = ev.clientY - obj.offsetTop;
  68.  
  69. if (pointsNum == '') {
  70.  
  71. pointsNum = x + ',' + y;
  72.  
  73. } else {
  74.  
  75. pointsNum += ',' + x + ',' + y;
  76.  
  77. }
  78.  
  79. var theText = createTag('text', {//绘制鼠标移动位置坐标
  80.  
  81. 'fill': 'red'
  82.  
  83. });
  84.  
  85. oSvg.appendChild(theText);
  86.  
  87. oPolyLine.setAttribute('points', pointsNum);
  88.  
  89. theText.setAttribute('x',x);
  90.  
  91. theText.setAttribute('y',y-);
  92.  
  93. theText.innerHTML=x + ',' + y;
  94.  
  95. var oCircle = createTag('circle', {//绘制线条起始点
  96.  
  97. 'cx': x,
  98.  
  99. 'cy': y,
  100.  
  101. 'r': '',
  102.  
  103. 'fill': 'white',
  104.  
  105. 'stroke': 'red',
  106.  
  107. 'stroke-width':
  108.  
  109. });
  110.  
  111. oSvg.appendChild(oCircle);
  112.  
  113. if (ev.button === ) {
  114.  
  115. oSvg.onmousemove = null;
  116.  
  117. oSvg.oncontextmenu = function() {
  118.  
  119. oSvg.onmousemove = null;
  120.  
  121. return false;
  122.  
  123. };
  124.  
  125. } else {
  126.  
  127. oSvg.onmousemove = function(ev) {//鼠标移动事件
  128.  
  129. var ev = ev || window.event;
  130.  
  131. if (!lineText) {//显示鼠标移动坐标
  132.  
  133. lineText = createTag('text', {
  134.  
  135. 'fill': 'red',
  136.  
  137. 'x': ev.clientX - obj.offsetLeft,
  138.  
  139. 'y': ev.clientY - obj.offsetTop
  140.  
  141. });
  142.  
  143. var x = ev.clientX - obj.offsetLeft;
  144.  
  145. var y = ev.clientY - obj.offsetTop;
  146.  
  147. lineText.innerHTML= x + ',' + y;;
  148.  
  149. oSvg.appendChild(lineText);
  150.  
  151. } else{
  152.  
  153. var x = ev.clientX - obj.offsetLeft;
  154.  
  155. var y = ev.clientY - obj.offsetTop;
  156.  
  157. lineText.setAttribute('x',x,'y',y);
  158.  
  159. lineText.innerHTML= x + ',' + y;;
  160.  
  161. }
  162.  
  163. if (oPolyLine) {
  164.  
  165. var x = ev.clientX - obj.offsetLeft;
  166.  
  167. var y = ev.clientY - obj.offsetTop;
  168.  
  169. oPolyLine.setAttribute('points', pointsNum + ',' + x + ',' + y);
  170.  
  171. }
  172.  
  173. };
  174.  
  175. }
  176.  
  177. }
  178.  
  179. },
  180.  
  181. }

vue中 使用SVG实现鼠标点击绘图 提示鼠标移动位置 显示绘制坐标位置的更多相关文章

  1. 在vue中使用svg sprite

    概述 这几天研究了一下在vue中使用svg sprite,有些心得,记录下来,供以后开发时参考,相信对其它人也有用. 在vue中导入svg 在vue中导入svg的方法有很多种,比如在img标签的src ...

  2. vue中怎么实现获取当前点击对象this

    应用场景 在评论列表中,有很多条评论(通过循环出来的评论列表),评论的文字有多跟少,默认展示2行超出显示点击查看更多,,要点击查看更多对当前的这条评论进行全部评论展示! 问题描述 要是在传统的点击事件 ...

  3. 如何在vue中使用svg

    1.安装依赖 npm install svg-sprite-loader --save-dev 2.在config文件中配置    const path = require('path'); func ...

  4. vue中使用svg字体图标

    1.在src/ 下面新建目录icons,里面新建文件夹svg,和文件index.js .svg用于存放从iconfont下载下来的svg格式的图标,index.js用于引入使用到svg文件和对应的组件 ...

  5. js点击获取—通过JS获取图片的相对坐标位置

    一.通过JS获取鼠标点击时图片的相对坐标位置 源代码如下所示: <!DOCTYPE html> <html lang="en"> <head> ...

  6. vue中,svg图标添加click事件,部分浏览器不生效

    vue项目中,使用svg图标,但是发现,为svg图标绑定click事件时,部分浏览器会出现,点击没有反应的情况,代码如下: <icon name="icon_add" @cl ...

  7. vue中引入.svg图标,使用iconfont图标库

    阿里巴巴的iconfont是一个很好的图标库,海量的素材可以快速满足开发人员日常对图标的诉求,我们采用symbol引用,官方介绍 创建SvgIcon组件 <template> <sv ...

  8. vue结合百度地图Api实现周边配置查询及根据筛选结果显示对应坐标详情

    在我们平常写房地产相关项目的时候经常会用到百度地图,因为这一块客户会考虑到房源周围的配套或者地铁线路所以在这类项目中就不可以避免的会用到百度地图,当然这只是其中一种,其他地图工具也可以,因为我这个项目 ...

  9. 在 React、Vue项目中使用 SVG

    在一些现代的扁平化设计网站,特别是移动端网站,经常会包含许多简单而清晰的小图标,例如网站图标.用户的默认头像.移动端网页首页底部固定的切换栏等,这些小图标一般都是由美工做好,可能会放到精灵图上,前端再 ...

随机推荐

  1. hdu2612 又是迷宫系列

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/2612/ 题意:有两个人在地图上不同的位置,地图上由若干个餐厅,求两人能同时到达一个餐厅所用最少的总时间. 代码如 ...

  2. Spring Cloud 系列之 Netflix Zuul 服务网关

    什么是 Zuul Zuul 是从设备和网站到应用程序后端的所有请求的前门.作为边缘服务应用程序,Zuul 旨在实现动态路由,监视,弹性和安全性.Zuul 包含了对请求的路由和过滤两个最主要的功能. Z ...

  3. C# NAudio录音和播放音频文件及实时绘制音频波形图(从音频流数据获取,而非设备获取)

    下午写了一篇关于NAudio的录音.播放和波形图的博客,不太满意,感觉写的太乱,又总结了下 NAudio是个相对成熟.开源的C#音频开发工具,它包含录音.播放录音.格式转换.混音调整等功能.本次介绍主 ...

  4. 一篇文章让你了解动态数组的数据结构的实现过程(Java 实现)

    目录 数组基础简单回顾 二次封装数组类设计 基本设计 向数组中添加元素 在数组中查询元素和修改元素 数组中的包含.搜索和删除元素 使用泛型使该类更加通用(能够存放 "任意" 数据类 ...

  5. OpenCV-Python 图像阈值 | 十五

    目标 在本教程中,您将学习简单阈值,自适应阈值和Otsu阈值. 你将学习函数cv.threshold和cv.adaptiveThreshold. 简单阈值 在这里,问题直截了当.对于每个像素,应用相同 ...

  6. HDU - 1962 二分图最大匹配模板(扑克牌得分最大)

    题意: 直接说数据,第一行给定几组数据,每一组数据的第一行是两个人扑克牌分别的数量,第一行是亚当的扑克牌,第二行是夏娃的扑克牌,每一个扑克牌的大小用两个字符来表示,第一个表示是几号扑克牌,第二个表示扑 ...

  7. RPC框架实现(一) Protobuf的rpc实现

    概述 RPC框架是云端服务基础框架之一,负责云端服务模块之间的项目调用,类似于本地的函数调用一样方便.常见的RPC框架配带的功能有: 编解码协议.比如protobuf.thrift等等. 服务发现.指 ...

  8. BZOJ 4472 salesman 题解

    题目 某售货员小T要到若干城镇去推销商品,由于该地区是交通不便的山区,任意两个城镇之间都只有唯一的可能经过其它城镇的路线.小T可以准确地估计出在每个城镇停留的净收益.这些净收益可能是负数,即推销商品的 ...

  9. dp例题01. 任务价值最大化

    题目Description: 大凯有n项任务可选择去做, 分别对应有开始时间, 结束时间以及任务报酬, 同一时间内最多做一件任务, 现在大凯想知道最多能得到多少报酬, 于是把求解任务交给了你. 输入: ...

  10. html中的字幕滚动marquee属性

    该标签不是HTML3.2的一部分,并且只支持MSIE3以后内核,所以如果你使用非IE内核浏览器(如:Netscape)可能无法看到下面一些很有意思的效果,该标签是个容器标签. 语法: <marq ...