HTML5ページには、次のようにmousemove
イベントを持つdivがあります。
$('#canvas').mousemove(function(e){
xpos = e.offsetX;
ypos = e.offsetY;
$('#mouse').html("X : " + xpos + " ; Y : " + ypos);
});
Google Chromeで正常に動作します。しかし、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でテストしています
アイデアや提案はありますか?
[〜#〜] edit [〜#〜]
私を助けてくれたdystroyとvusanに感謝します。上記の問題の解決策は次のとおりです。
[〜#〜] 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);
});
FirefoxではlayerX
とlayerY
を、他のブラウザではoffsetX
を使用してみてください。
Jqueryでイベントが発生した場合:
xpos = e.offsetX === undefined ? e.originalEvent.layerX : e.offsetX;
ypos = e.offsetY === undefined ? e.originalEvent.layerY : e.offsetY;
Javascriptでイベントが発生した場合:
xpos = e.offsetX==undefined?e.layerX:e.offsetX;
ypos = e.offsetY==undefined?e.layerY:e.offsetY;
FFではlayerX
とlayerY
を使用し、他のすべてのブラウザーではoffsetX
とoffsetY
を使用します。
$('#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);
});
OriginalEventにあるため、それらは見つかりませんでした。試してください:e.originalEvent.layerX e.originalEvent.layerY
PageXとpageYについては、同じことを計算していません。 layerXは、最初の相対/絶対親からのオブジェクトの左側です。 pageXは、ページのオブジェクトの左側です。
これは、Firefoxなどで正常に機能します。
var offsetRequired = (e.offsetX || e.pageX - $(e.target).offset().left);