【发布时间】:2012-10-03 08:35:01
【问题描述】:
在我的 HTML5 页面中,我有一个带有 mousemove 事件的 div,如下所示:
$('#canvas').mousemove(function(e){
xpos = e.offsetX;
ypos = e.offsetY;
$('#mouse').html("X : " + xpos + " ; Y : " + ypos);
});
它适用于谷歌浏览器。但在 Firefox 中,两者都给出了undefined 的值。我已经使用 Firebug 进行了检查,即将e 对象记录到控制台。发现offsetX 和offsetY 都是undefined。
当我在 Google 中搜索时,有一个解决方案说我应该使用 layerX 和 layerY,如果 offsetX 和 offsetY 都未定义。
但是从 Firebug 中,我找不到它。甚至我也试过这样:
xpos = (e.offsetX==undefined)?e.layerX:e.offsetX;
ypos = (e.offsetY==undefined)?e.layerY:e.offsetY;
但这也将undefined 作为值。
我正在使用最新的 jQuery - v1.8.2。我正在我的 Firefox v14.0.1 中进行测试
有什么想法或建议吗?
编辑
感谢dystroy 和vusan 帮助我。上述问题的解决方法如下:
解决方案
$('#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);
});
【问题讨论】:
-
不确定您使用的是哪个版本的 Google Chrome,但似乎在 Chrome v26 版本中也给出了未定义的对象。
-
@cartbeforehorse:我使用的是 Chrome 版本 26.0.1410.64 m。它工作正常。现场观看:jsfiddle.net/EEftW
-
我确实被吸引了。使用 typescript 和 StronglyTyped jQuery 定义文件,我被引导相信 OffsetX/Y 是 jquery 的一部分。从来没有意识到它们是可选的,并且只包含在某些浏览器中。感谢您的帖子,您帮我在一堆乱七八糟的代码中找到了问题。
-
在 Firefox 中不适合我
-
这在 Firefox 30 中对我不起作用 - pageX 和 pageY 始终为 0
标签: jquery html events undefined