4

タイムアウト コールバックでマウスの位置を取得したい。

私が知る限り、これは直接行うことはできません。回避策の 1 つは、document.body に onmousemove イベントを設定し、この位置を保存して後で取得することです。ただし、これはかなり高価であり、最もクリーンなアプローチではありません。

4

3 に答える 3

2

@Oliと同じことをする必要があると思いますが、jQueryを使用している場合は、はるかに簡単です。

http://docs.jquery.com/Tutorials:Mouse_Position

<script type="text/javascript">
jQuery(document).ready(function(){
  $().mousemove(function(e){
    $('#status').html(e.pageX +', '+ e.pageY);
  }); 
})
</script>
于 2009-01-11T19:09:26.833 に答える
0

あなたが説明したように、それを行う最も簡単な方法は、本体に onmousemove イベント ハンドラーを設定することです。思ったよりもコストがかからない: 座標を格納するための計算はほとんど行われず、マウスが動くと 1 秒間に 50 ~ 100 回イベントが発生します。また、一般的なユーザーは、Web ページを表示するときに常にマウスを動かすことはないと思います。

次のスクリプトは、イベント ハンドラーのカウントに役立ちます。私のマシンでは、Firefox でマウスを動かすと、CPU 使用率が 5% から 10% 増加しました。

<script type="text/javascript">
jQuery(document).ready(function(){
    var count = 0;
    $().mousemove(function(e){ count += 1; }); 
    $().click(function(e){ $('#status').html(count); });
}); 
</script>
于 2009-01-11T20:05:37.533 に答える
0

直接の答えはノーですが、あなたが正しく言うように、すべてにイベントをアタッチし、それに応じてポーリングすることができます。すべての onmousemove インスタンスで本格的なプログラミングを行うのはコストがかかるため、ページの周りにいくつかのゾーンを作成し、onmouseover イベントをポーリングする方がよい場合があります

別の代替手段は、(これがまったく機能するかどうかはわかりませんが)定期的なタイムアウトを次のように設定することです。

  1. body に onmousemove ハンドラを追加する
  2. ページ全体を移動する (例: body の margin-top を変更する)
  3. onmousemove ハンドラーがトリガーされたら、位置を取得してハンドラーを削除します。このイベントでもタイムアウトが必要になる場合があります (マウスがビューポートの外にある場合)。

Uberhack でもうまくいくかもしれません

于 2009-01-11T18:56:50.777 に答える