vue中 使用SVG实现鼠标点击绘图 提示鼠标移动位置 显示绘制坐标位置

15 篇文章 0 订阅
11 篇文章 0 订阅

<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')[0];

obj.appendChild(createTag('svg', {

'xmlns': ming

}));

oSvg.onmousedown = function(ev) {

if (!oPolyLine) {

oPolyLine = createTag('polyline', {

'fill': 'none',

'stroke': 'red',

'stroke-width': '2'

});

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-30);

theText.innerHTML=x + ',' + y;

var oCircle = createTag('circle', {//绘制线条起始点

'cx': x,

'cy': y,

'r': '5',

'fill': 'white',

'stroke': 'red',

'stroke-width': 3

});

oSvg.appendChild(oCircle);

if (ev.button === 2) {

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);

}

};

}

}

},

}

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值