HTML5 avec jQuery - e.offsetX est pas défini dans Firefox
Dans ma HTML5 page, j'ai un div avec mousemove
événement comme suit:
$('#canvas').mousemove(function(e){
xpos = e.offsetX;
ypos = e.offsetY;
$('#mouse').html("X : " + xpos + " ; Y : " + ypos);
});
Il fonctionne très bien avec Google Chrome. Mais dans Firefox, les deux sont de donner la valeur undefined
. J'ai vérifié en utilisant Firebug, c'est connecté la e
objet de la console. Les deux offsetX
et offsetY
sont undefined
.
Lorsque j'ai cherché dans Google, il y avait une solution en disant que je devrais utiliser layerX
et layerY
, si les deux offsetX
et offsetY
ne sont pas définis.
Mais à partir de Firebug, je n'étais pas capable de le trouver. Et j'avais moi-même donné un essai comme ceci:
xpos = (e.offsetX==undefined)?e.layerX:e.offsetX;
ypos = (e.offsetY==undefined)?e.layerY:e.offsetY;
Mais c'est aussi donner undefined
en tant que valeurs.
Je suis en utilisant la plus récente de jQuery - v1.8.2. Et je suis en train de tester dans mon Firefox v14.0.1
Des idées ou des suggestions?
MODIFIER
Grâce à dystroy et vusan pour m'aider. La solution à ce problème est comme suit:
SOLUTION
$('#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);
});
- pas sûr de ce que la version de Google Chrome que vous utilisez, mais il semble donner un objet non défini dans la version Chrome v26 aussi.
- Je suis en utilisant google Chrome Version 26.0.1410.64 m. Et il fonctionne très bien. Voir en direct: jsfiddle.net/EEftW
- Bien sûr, j'ai aspiré dans. À l'aide de la machine et StronglyTyped jQuery fichiers de définition, j'ai été amené à croire OffsetX/Y avait des parties de jquery. Je n'avais jamais réalisé qu'ils étaient en option et uniquement inclus dans certains navigateurs. Merci pour votre post, vous m'avez aidé à trouver le problème dans un immense gâchis de code.
- Ne fonctionne pas pour moi dans Firefox
- Cela ne fonctionne pas pour moi dans Firefox 30 - pageX et pageY sont toujours à 0
- Wow. Un peu surpris de voir que jQuery n'est pas régulariser cette!
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser
layerX
etlayerY
pour Firefox etoffsetX
pour les autres navigateur.Si l'événement est déclenché avec jquery:
Si l'événement est déclenché avec javascript:
#canvas
). pageX/Y sont relatifs à la<html>
de l'élément stackoverflow.com/questions/6073505/...var xInCanvas = e.pageX-$canvas.offset().left;
if(e.offsetX==undefined) { xpos = e.pageX-$('#canvas').offset().left; ypos = e.pageY-$('#canvas').offset().top; } else { xpos = e.offsetX; ypos = e.offsetY; }
Merci encore les gars 🙂e.originalEvent.layerX
pase.layerX
, voir autre réponse(s). Et pourtant aucune raison d'avoir la même réponse 3 fois 🙂Utilisation
layerX
etlayerY
dans FF etoffsetX
etoffsetY
dans tous les autres navigateurs.Vous n'avez pas les trouver, car son dans le originalEvent.
essayez:
e.originalEvent.layerX
e.originalEvent.layerY
Sur le pageX et pageY ils ne calcule pas la même chose.
layerX est la gauche de l'objet de la première relatif/absolu parent.
pageX est la gauche de l'objet à partir de la page.
Cela fonctionne très bien sous firefox et autres.
Firefox en fait ne soutien
MouseEvent.offsetX
etMouseEvent.offsetY
après la libération de 39,0, qui est sorti en juillet 2015.