2009-07-15 1 views

答えて

44

できません。ただし、チュートリアルで同じ方法を使用して、グローバル変数に位置を格納し、イベント外で読み取ることはできます。このよう

jQuery(document).ready(function(){ 
    $().mousemove(function(e){ 
     window.mouseXPos = e.pageX; 
     window.mouseYPos = e.pageY; 
    }); 
}) 

あなたは今どこからでもwindow.mouseXPoswindow.mouseYPosを使用することができます。

+0

これはjQueryまたはJavaScriptの制限ですか? – pbz

+4

@pbz JavaScriptの制限です。 –

+4

jQuery.one( 'mousemove'、function(){})を設定しました。この目的のために。それをsetTimeoutで遅延させ、次回の移動時にマウスの位置をキャプチャしてください。 – aceofspades

29

これはChetan Sastry's answerにコメントとして始まったが、私はそれも答えとして掲載する価値があるかもしれません実現:

も、あなたならば、私は、ドキュメントレベル、常に実行されているmousemoveイベントを持っていることについて注意が必要だろうカーソル位置だけをポーリングします。これは多くの処理であり、ブラウザ、特にIEなどのブラウザの速度が遅くなる可能性があります。

カーソルの位置をポーリングするためにマウスイベントを処理する必要がない場合は、実際にカーソル位置が必要ですか?あなたが解決しようとしている問題を解決する良い方法はありますか?

編集:さえあるのSafari 4、(控えめ)非常に高速で、その単一mousemoveイベントは私にとってそのチュートリアルページを持つすべての相互作用が著しく途切れ途切れになります。それがあなたのサイトやアプリケーションに対するユーザーの認識にどのように影響するか考えてみてください。

+3

+1:同じ懸念がありました。 – Joel

+0

本当ではありません。マウスイベントは常に生成されます。つまり、マウスが動くと、ブラウザーはJSコールバック関数を実行するまではマウスイベントを計算します(ネイティブコードを介して)。すべてのマウス関連のイベントリスナーにとって基本的なことです。ブラウザが 'document.onmousemove'を除いてその情報を公開するという共通の礼儀を提供することができません。これは、私が懸念している限り、ES5/ES6の近視眼です。実際にマウス位置をポーリングすることで、マウスでDOM要素を移動するときなど、バウンスを起こす「onmousemove」イベントを簡単にすることができます。 – codechimp

10

この関数は、唯一の間隔でマウスの位置を取得することにより、UIのパフォーマンスへの影響を減少させます「あなたは今、どこからでもwindow.mouseXPoswindow.mouseYPosを使用することができます」ただ、他の回答のように

function getMousePosition(timeoutMilliSeconds) { 
    // "one" attaches the handler to the event and removes it after it has executed once 
    $(document).one("mousemove", function (event) { 
     window.mouseXPos = event.pageX; 
     window.mouseYPos = event.pageY; 
     // set a timeout so the handler will be attached again after a little while 
     setTimeout(function() { getMousePosition(timeoutMilliSeconds) }, timeoutMilliseconds); 
    }); 
} 

// start storing the mouse position every 100 milliseconds 
getMousePosition(100); 

は、

間隔の間にマウスの移動が検出されないため、少し正確さが失われます。

+6

評価のような構造を使用しないでください。それらはあまり効率的でなく、潜在的なセキュリティリスクです。 'setTimeout(function(){getMousePosition(timeoutMilliSeconds)}、timeoutMilliseconds);' –

1

@Chetan Sastryのソウルシップを試しましたが、動作しません(jQuery 1.6.4を使用しています)。私はコードを変更し、私は今働いています。ここに私のコードです。これが助けてくれるといいなあ



    $(document).ready(function(){ 
     $(document).mousemove(function(e){ 
      window.mouseXPos = e.pageX; 
      window.mouseYPos = e.pageY; 
     }); 
    }); 

+0

が確認されました。この変更により、jQuery 1.4.4も修正されています – Emperorlou

関連する問題