我有一个返回鼠标事件位置的函数。
// returns the xy point where the mouse event was occured.
function getXY(ev){
var xypoint = new Point();
if (ev.layerX || ev.layerY) { // Firefox
xypoint.x = ev.layerX;
xypoint.y = ev.layerY;
} else if (ev.offsetX || ev.offsetX == 0) { // Opera
xypoint.x = ev.offsetX;
xypoint.y = ev.offsetY;
}
return xypoint;
}
我正在捕捉鼠标事件以在html5画布上执行绘图。有时我得到xypoint的-ve值。当我使用firebug调试应用程序时,我的行为非常奇怪。例如,如果我使用条件(xypoint.x< 0 || xypoint.y< 0)将断点放在此函数的第4行,它会在断点处停止,我可以看到layer.x,layer.y是积极和正确的。但是xypoint.x或xypoint.y是否定的。如果我使用firbug控制台重新分配值,我会在xypoint中获得正确的值。任何人都可以解释我发生了什么。
如果我以正常速度移动鼠标,上述工作正常。如果我以非常快的速度移动鼠标,我会得到这种行为。
由于
答案 0 :(得分:0)
使用Canvas处理鼠标位置是一种绝对的痛苦。你必须进行大量的调整。我使用它,它有一些小错误,但即使我在我的应用程序中使用拖放div:
getCurrentMousePosition = function(e) {
// Take mouse position, subtract element position to get relative position.
if (document.layers) {
xMousePos = e.pageX;
yMousePos = e.pageY;
xMousePosMax = window.innerWidth+window.pageXOffset;
yMousePosMax = window.innerHeight+window.pageYOffset;
} else if (document.all) {
xMousePos = window.event.x+document.body.scrollLeft;
yMousePos = window.event.y+document.body.scrollTop;
xMousePosMax = document.body.clientWidth+document.body.scrollLeft;
yMousePosMax = document.body.clientHeight+document.body.scrollTop;
} else if (document.getElementById) {
xMousePos = e.pageX;
yMousePos = e.pageY;
xMousePosMax = window.innerWidth+window.pageXOffset;
yMousePosMax = window.innerHeight+window.pageYOffset;
}
elPos = getElementPosition(document.getElementById("cvs"));
xMousePos = xMousePos - elPos.left;
yMousePos = yMousePos - elPos.top;
return {x: xMousePos, y: yMousePos};
}
getElementPosition = function(el) {
var _x = 0,
_y = 0;
if(document.body.style.marginLeft == "" && document.body.style.marginRight == "" ) {
_x += (window.innerWidth - document.body.offsetWidth) / 2;
}
if(el.offsetParent != null) while(1) {
_x += el.offsetLeft;
_y += el.offsetTop;
if(!el.offsetParent) break;
el = el.offsetParent;
} else if(el.x || el.y) {
if(el.x) _x = el.x;
if(el.y) _y = el.y;
}
return { top: _y, left: _x };
}
故事的道德?您需要在画布的偏移量中计算以获得正确的结果。您正在从事件中捕获XY,该事件具有相对于窗口XY未捕获的偏移。有意义吗?