Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTML5 with jQuery - e.offsetX is undefined in Firefox

In my HTML5 page, I have a div with mousemove event as follows:

$('#canvas').mousemove(function(e){     xpos = e.offsetX;     ypos = e.offsetY;     $('#mouse').html("X : " + xpos + " ; Y : " + ypos); }); 

It works fine with Google Chrome. But in Firefox, both the are giving the value undefined. I have checked it by using Firebug, that is, logged the e object to console. Both offsetX and offsetY are found to be undefined.

When I searched in Google, there was a solution saying I should use layerX and layerY, if both offsetX and offsetY are undefined. But from Firebug, I was not able to find it. And even I had given it a try like this:

xpos = (e.offsetX==undefined)?e.layerX:e.offsetX; ypos = (e.offsetY==undefined)?e.layerY:e.offsetY; 

But that's also giving undefined as values.

I am using the most recent jQuery - v1.8.2. And I am testing in my Firefox v14.0.1

Any ideas or suggestions?


EDIT

Thanks to dystroy and vusan for helping me. The solution to the above issue is as follows:

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); }); 
like image 699
Akhilesh B Chandran Avatar asked Oct 03 '12 08:10

Akhilesh B Chandran


People also ask

Is offsetx and offsety undefined?

I have checked it by using Firebug, that is, logged the e object to console. Both offsetX and offsetY are found to be undefined. When I searched in Google, there was a solution saying I should use layerX and layerY, if both offsetX and offsetY are undefined. But from Firebug, I was not able to find it. And even I had given it a try like this:

What does the offset () method do in HTML?

The offset () method set or returns the offset coordinates for the selected elements, relative to the document. This method returns the offset coordinates of the FIRST matched element. It returns an object with 2 properties; the top and left positions in pixels.

Why is my jQuery undefined?

There can be several different reasons why jQuery might be undefined; maybe it is not yet loaded, or maybe a script is unloading it. In this tutorial I will explain some of the problems and solutions that I have come by when developing Wordpress websites. By. Jacob

What does the offsetx property do in JavaScript?

The offsetX property returns the x-coordinate of the mouse pointer, relative to the target element. Tip: To get the y-coordinate, use the offsetY property.


2 Answers

Try using layerX and layerY for Firefox and offsetX for other browser.

If event fired with jquery:

xpos = e.offsetX === undefined ? e.originalEvent.layerX : e.offsetX; ypos = e.offsetY === undefined ? e.originalEvent.layerY : e.offsetY; 

If event fired with javascript:

xpos = e.offsetX==undefined?e.layerX:e.offsetX; ypos = e.offsetY==undefined?e.layerY:e.offsetY; 
like image 125
vusan Avatar answered Sep 20 '22 10:09

vusan


Use layerX and layerY in FF and offsetX and offsetY in all other browsers.

$('#canvas').mousemove(function(e){   xpos = e.offsetX === undefined ? e.originalEvent.layerX : e.offsetX;   ypos = e.offsetY === undefined ? e.originalEvent.layerY : e.offsetY;    $('#mouse').html("X : " + xpos + " ; Y : " + ypos); }); 
like image 25
Pavel Nikolov Avatar answered Sep 24 '22 10:09

Pavel Nikolov