【发布时间】:2014-06-25 05:27:59
【问题描述】:
我有一个 SVG 矩形元素,需要在屏幕上拖动。问题是快速拖动时它不起作用。我把代码贴在jsFiddle。
this post 中的示例解决了 JQuery 中的问题。我将解决方案改编为 SVG,但它不起作用。有任何想法吗?
这是 HTML 代码:
<svg id="svg" width="800" height="800" style="border: 1px dashed black;"
onmousemove="move(evt)" onmouseup="endMove(evt)" onmouseout="endMove(evt)">
<rect id="r" x="100" y="100" height="150" width="150" onmousedown="mouseDown(evt)"/>
</svg>
还有 javascript:
var click=false; // flag to indicate when shape has been clicked
var clickX, clickY; // stores cursor location upon first click
var moveX=0, moveY=0; // keeps track of overall transformation
var lastMoveX=0, lastMoveY=0; // stores previous transformation (move)
function mouseDown(evt){
evt.preventDefault();
click=true;
clickX = evt.clientX;
clickY = evt.clientY;
}
function move(evt){
evt.preventDefault();
if(click){
moveX = lastMoveX + ( evt.clientX - clickX );
moveY = lastMoveY + ( evt.clientY - clickY );
evt.target.setAttribute("transform", "translate(" + moveX + "," + moveY + ")");
}
}
function endMove(evt){
click=false;
lastMoveX = moveX;
lastMoveY = moveY;
}
【问题讨论】:
-
你的小提琴在任何速度下都能正常工作,除非我将鼠标移出页面。由于您的代码没有考虑到这一点,因此拖动不会在 mousein 上恢复。
-
同意迈克。我认为问题在于您的
mouseout处理程序过早地调用 endMove。
标签: javascript svg