W mojej strony HTML5, Mam div z mousemove
przypadku następująco:HTML5 z jQuery - e.offsetX jest niezdefiniowane w Firefoksie
$('#canvas').mousemove(function(e){
xpos = e.offsetX;
ypos = e.offsetY;
$('#mouse').html("X : " + xpos + " ; Y : " + ypos);
});
Współpracuje z Google Chrome. Ale w Firefoksie oba nadają wartość undefined
. Sprawdziłem to za pomocą Firebug, czyli zalogowałem obiekt e
do konsoli. Zarówno offsetX
, jak iuznano za undefined
.
Kiedy szukałem w Google, nie było rozwiązanie mówiąc powinienem użyć layerX
i layerY
, jeśli zarówno offsetX
i offsetY
są niezdefiniowane. Ale od Firebuga nie mogłem go znaleźć. I nawet dałem mu spróbować tak:
xpos = (e.offsetX==undefined)?e.layerX:e.offsetX;
ypos = (e.offsetY==undefined)?e.layerY:e.offsetY;
Ale to również daje undefined
jako wartości.
Używam najnowszej wersji jQuery - v1.8.2. I testuję w Firefoksie v1.0.0.1
Wszelkie pomysły i sugestie?
EDIT
Dzięki dystroy i vusan za pomoc. Rozwiązaniem powyższego problemu jest następujący:
ROZWIĄZANIE
$('#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);
});
Nie wiesz, której wersji Google Chrome używasz, ale wydaje się, że dałeś również niezdefiniowany obiekt w wersji Chrome 26. – cartbeforehorse
@cartbeforehorse: używam Chrome w wersji 26.0.1410.64 m. I działa dobrze. Zobacz go na żywo: http://jsfiddle.net/EEftW/ –
Na pewno zostałem wessany. Używając plików definicji maszynopisów i StronglyTyped jQuery, byłem przekonany, że OffsetX/Y są częściami jquery. Nigdy nie zdawałem sobie sprawy, że są one opcjonalne i są dostępne tylko w niektórych przeglądarkach. Dzięki za twój post, pomogłeś mi znaleźć problem w rozległym bałaganie kodu. – fabspro