vue中 使用SVG实现鼠标点击绘图 提示鼠标移动位置 显示绘制坐标位置
<div class="div1">
<svg id="svg1" xmlns="http://www.w3.org/2000/svg" width="100%" height="500px">
</svg>
</div>
methods:{
svgLoad(){
var ming = 'http://www.w3.org/2000/svg';
var oSvg = document.getElementById('svg1');
var oPolyLine = null;
var pointsNum = '';
var lineText = null;
function createTag(tagName, tagAttr) {
let tag = document.createElementNS(ming, tagName);
for (var attr in tagAttr) {
tag.setAttribute(attr, tagAttr[attr]);
}
return tag;
}
var obj = document.querySelectorAll('.div1')[];
obj.appendChild(createTag('svg', {
'xmlns': ming
}));
oSvg.onmousedown = function(ev) {
if (!oPolyLine) {
oPolyLine = createTag('polyline', {
'fill': 'none',
'stroke': 'red',
'stroke-width': ''
});
oSvg.appendChild(oPolyLine);
}
var x = ev.clientX - obj.offsetLeft;
var y = ev.clientY - obj.offsetTop;
if (pointsNum == '') {
pointsNum = x + ',' + y;
} else {
pointsNum += ',' + x + ',' + y;
}
var theText = createTag('text', {//绘制鼠标移动位置坐标
'fill': 'red'
});
oSvg.appendChild(theText);
oPolyLine.setAttribute('points', pointsNum);
theText.setAttribute('x',x);
theText.setAttribute('y',y-);
theText.innerHTML=x + ',' + y;
var oCircle = createTag('circle', {//绘制线条起始点
'cx': x,
'cy': y,
'r': '',
'fill': 'white',
'stroke': 'red',
'stroke-width':
});
oSvg.appendChild(oCircle);
if (ev.button === ) {
oSvg.onmousemove = null;
oSvg.oncontextmenu = function() {
oSvg.onmousemove = null;
return false;
};
} else {
oSvg.onmousemove = function(ev) {//鼠标移动事件
var ev = ev || window.event;
if (!lineText) {//显示鼠标移动坐标
lineText = createTag('text', {
'fill': 'red',
'x': ev.clientX - obj.offsetLeft,
'y': ev.clientY - obj.offsetTop
});
var x = ev.clientX - obj.offsetLeft;
var y = ev.clientY - obj.offsetTop;
lineText.innerHTML= x + ',' + y;;
oSvg.appendChild(lineText);
} else{
var x = ev.clientX - obj.offsetLeft;
var y = ev.clientY - obj.offsetTop;
lineText.setAttribute('x',x,'y',y);
lineText.innerHTML= x + ',' + y;;
}
if (oPolyLine) {
var x = ev.clientX - obj.offsetLeft;
var y = ev.clientY - obj.offsetTop;
oPolyLine.setAttribute('points', pointsNum + ',' + x + ',' + y);
}
};
}
}
},
}
vue中 使用SVG实现鼠标点击绘图 提示鼠标移动位置 显示绘制坐标位置的更多相关文章
- 在vue中使用svg sprite
概述 这几天研究了一下在vue中使用svg sprite,有些心得,记录下来,供以后开发时参考,相信对其它人也有用. 在vue中导入svg 在vue中导入svg的方法有很多种,比如在img标签的src ...
- vue中怎么实现获取当前点击对象this
应用场景 在评论列表中,有很多条评论(通过循环出来的评论列表),评论的文字有多跟少,默认展示2行超出显示点击查看更多,,要点击查看更多对当前的这条评论进行全部评论展示! 问题描述 要是在传统的点击事件 ...
- 如何在vue中使用svg
1.安装依赖 npm install svg-sprite-loader --save-dev 2.在config文件中配置 const path = require('path'); func ...
- vue中使用svg字体图标
1.在src/ 下面新建目录icons,里面新建文件夹svg,和文件index.js .svg用于存放从iconfont下载下来的svg格式的图标,index.js用于引入使用到svg文件和对应的组件 ...
- js点击获取—通过JS获取图片的相对坐标位置
一.通过JS获取鼠标点击时图片的相对坐标位置 源代码如下所示: <!DOCTYPE html> <html lang="en"> <head> ...
- vue中,svg图标添加click事件,部分浏览器不生效
vue项目中,使用svg图标,但是发现,为svg图标绑定click事件时,部分浏览器会出现,点击没有反应的情况,代码如下: <icon name="icon_add" @cl ...
- vue中引入.svg图标,使用iconfont图标库
阿里巴巴的iconfont是一个很好的图标库,海量的素材可以快速满足开发人员日常对图标的诉求,我们采用symbol引用,官方介绍 创建SvgIcon组件 <template> <sv ...
- vue结合百度地图Api实现周边配置查询及根据筛选结果显示对应坐标详情
在我们平常写房地产相关项目的时候经常会用到百度地图,因为这一块客户会考虑到房源周围的配套或者地铁线路所以在这类项目中就不可以避免的会用到百度地图,当然这只是其中一种,其他地图工具也可以,因为我这个项目 ...
- 在 React、Vue项目中使用 SVG
在一些现代的扁平化设计网站,特别是移动端网站,经常会包含许多简单而清晰的小图标,例如网站图标.用户的默认头像.移动端网页首页底部固定的切换栏等,这些小图标一般都是由美工做好,可能会放到精灵图上,前端再 ...
随机推荐
- Python-生成器实现简单的"生产者消费者"模型
一.使用生成器实现简单的生产者消费者模型, 1.效果截屏 代码如下: import time def consumer(name): print('%s 开始买手机' %name) while Tru ...
- webpack打包es6代码
1.简单描述一下es6的模块导入和导出的语法: //导出:export var aa = 10;export function demo(){} //不能写成:var aa = 10;export a ...
- 北邮oj 97. 二叉排序树
97. 二叉排序树 时间限制 1000 ms 内存限制 65536 KB 题目描述 二叉排序树,也称为二叉查找树.可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 若左子树非空,则左子树上所有节 ...
- Java基础语法(6)-注释
title: Java基础语法(6)-注释 blog: CSDN data: Java学习路线及视频 用于注解说明解释程序的文字就是注释. 提高了代码的阅读性:调试程序的重要方法. 注释是一个程序员必 ...
- Prism 源码解读4-ViewModel注入
介绍 介绍一个Prism的MVVM实现,主要介绍Prism如何在WPF上进行的一些封装,以实现MVVM.MVVM到底是什么呢?看一下这一幅经典的图 以前没有ViewModel这个概念,就是将Model ...
- Dome_iptest_server
一个简单的ip测试服务器 打印返回 请求头request import socket def send_data(conn, data=None, status=200): if status != ...
- [vijos1159&洛谷1494]岳麓山上打水<迭代深搜>
题目链接:https://vijos.org/p/1159 https://www.luogu.org/problem/show?pid=1494 这是今天的第三道迭代深搜的题,虽然都是迭代深搜的模板 ...
- LeetCode47, 全排列进阶,如果有重复元素怎么办?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第28篇,依然是全排列的问题. 如果对全排列不熟悉或者是最近关注的同学可以看一下上一篇文章: LeetCode46 回 ...
- element的多文件上传
项目需求: 可上传多个文件 可删除 文件过大时用户输入可上传至其他网站,并将文件名和地址上传至本网站 问题点: 大文件用户输入内容无法合并到已上传文件的列表进行展示 上传多个大文件地址时前面已上传的大 ...
- 实验十一 MySQLl备份与恢复1
实验十一 MySQL备份与恢复 一. 实验内容: 1. 使用SQL语句导入和导出表数据 2. 使用客户端工具备份还原数据库 3. 使用日志文件恢复数据库 二. 实验项目:学生成绩数据库 创建用于学 ...