In chrome canary, layerX and layerY are deprecated, but what should we use instead ?
I\'ve find offsetX but it doesn\'t work with Firefox. So to get layerX without w
Are you sure layerX and layerY are deprecated?
In my experience they are still there, mostly because the related properties offsetX and offsetY are not implemented in other browsers:
There is a lot of discussion going on at webkit and mozilla though:
https://bugs.webkit.org/show_bug.cgi?id=21868 and https://bugzilla.mozilla.org/show_bug.cgi?id=674292 In a nutshell, they are both a bit inconclusive whether or not to remove it, so for now they did not remove it.
later IE versions provide an alias that maps to the x and y properties (I am not allowed to post any further links by stack overflow, because of a lack of 'reputation').
Here is a function to calculate layerX and layerY from a click event:
function getOffset(evt) {
var el = evt.target,
x = 0,
y = 0;
while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {
x += el.offsetLeft - el.scrollLeft;
y += el.offsetTop - el.scrollTop;
el = el.offsetParent;
}
x = evt.clientX - x;
y = evt.clientY - y;
return { x: x, y: y };
}
Thanks a lot to Stu Cox for pointing out the two functions used to make this one.
The only reasonably cross-browser ways to detect mouse position are clientX
/clientY
(relative to window), screenX
/screenY
(relative to entire screen) and pageX
/pageY
(relative to document, but not supported in IE8 and below).
Quirksmode suggests this for standardising to a relative-to-document value:
function doSomething(e) {
var posx = 0;
var posy = 0;
if (!e) var e = window.event;
if (e.pageX || e.pageY) {
posx = e.pageX;
posy = e.pageY;
}
else if (e.clientX || e.clientY) {
posx = e.clientX + document.body.scrollLeft
+ document.documentElement.scrollLeft;
posy = e.clientY + document.body.scrollTop
+ document.documentElement.scrollTop;
}
// posx and posy contain the mouse position relative to the document
// Do something with this information
}
Then you could use this to work out its position relative to your element.
Horrible, I know, but the internet's a horrible place.