En mi página de HTML 5, tengo un div con mousemove
evento como sigue:HTML5 con jQuery - e.offsetX no está definido en Firefox
$('#canvas').mousemove(function(e){
xpos = e.offsetX;
ypos = e.offsetY;
$('#mouse').html("X : " + xpos + " ; Y : " + ypos);
});
Funciona bien con Google Chrome. Pero en Firefox, ambos dan el valor undefined
. Lo he comprobado usando Firebug, es decir, he registrado el objeto e
en la consola. Ambos offsetX
y offsetY
son undefined
.
Cuando busqué en Google, había una solución diciendo que debería usar layerX
y layerY
, si ambos offsetX
y offsetY
no están definidos. Pero de Firebug, no pude encontrarlo. E incluso le había dado una oportunidad como esta:
xpos = (e.offsetX==undefined)?e.layerX:e.offsetX;
ypos = (e.offsetY==undefined)?e.layerY:e.offsetY;
Pero eso también está dando undefined
como valores.
Estoy utilizando el jQuery más reciente - v1.8.2. Y estoy probando en mi Firefox v14.0.1
¿Alguna idea o sugerencia?
EDITAR
Gracias a dystroy y Vusan por ayudarme. La solución al problema anterior es el siguiente:
SOLUCIÓN
$('#canvas').mousemove(function(e){
$('#cursor').show();
if(e.offsetX==undefined) // this works for Firefox
{
xpos = e.pageX-$('#canvas').offset().left;
ypos = e.pageY-$('#canvas').offset().top;
}
else // works in Google Chrome
{
xpos = e.offsetX;
ypos = e.offsetY;
}
$('#mouse').html("X : " + xpos + " ; Y : " + ypos);
});
no estoy seguro de qué versión de Google Chrome estaba usando, pero parece que también da un objeto indefinido en la versión Chrome v26. – cartbeforehorse
@cartbeforehorse: Estoy usando la versión de Chrome 26.0.1410.64 m. Y funciona bien Véalo en vivo: http://jsfiddle.net/EEftW/ –
Estoy seguro que me atrapó. Utilizando archivos de definición de jQuery de mecanografía y StronglyTyped, se me hizo creer que OffsetX/Y formaba parte de jquery. Nunca me di cuenta de que eran opcionales y solo se incluían en ciertos navegadores. Gracias por su publicación, me ayudó a encontrar el problema en un caos de código. – fabspro