41

このチュートリアルのように(できれば)jQueryを使用して、JavaScriptイベントの外部で、マウスの絶対位置/座標(XおよびY)を取得する必要があります。ありがとうございました。

4

4 に答える 4

48

ありえない。ただし、チュートリアルで同じアプローチを使用して、位置をグローバル変数に格納し、イベントの外部で読み取ることができます。

このような:

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

window.mouseXPosこれで、どこからでも使用できますwindow.mouseYPos

于 2009-07-15T20:33:29.313 に答える
29

これはChetanSastryの回答に対するコメントとして始まりましたが、回答として投稿する価値があるかもしれないことに気づきました。

mousemoveカーソル位置のみをポーリングしている場合でも、ドキュメントレベルの常に実行されるイベントの発生には注意が必要です。これは多くの処理であり、どのブラウザ、特にIEのような遅いブラウザでも動作しなくなる可能性があります。

このような問題は、ほぼ確実に設計上の決定の問題を引き起こします。カーソル位置をポーリングするためにマウスイベントを処理する必要がない場合、本当にカーソル位置が必要ですか?あなたが解決しようとしている問題を解決するためのより良い方法はありますか?

編集:(控えめに言っても)非常に高速なSafari4でも、その1つのmousemoveイベントによって、そのチュートリアルページとのすべてのやり取りが著しく途切れます。それがサイトやアプリケーションに対するユーザーの認識にどのように影響するかを考えてください。

于 2010-01-13T15:57:44.273 に答える
10

この関数は、一定の間隔でマウスの位置を取得するだけで、UIパフォーマンスへの影響を減らします。

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);

他の回答と同じように、「どこからでも使用できるようwindow.mouseXPosになりました」。window.mouseYPos

インターバル中にマウスの動きが検出されないため、精度が少し低下します。

于 2011-05-16T13:14:57.497 に答える
2

@Chetan Sastryのsoulutionを試しましたが、機能しません(jQuery 1.6.4を使用しています)。コードを変更して、今は動作します。これが私のコードです。これがお役に立てば幸いです。



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

于 2012-07-24T03:17:14.747 に答える