Javascript: возможно ли получить положение мыши вне обработчика событий? - PullRequest
4 голосов
/ 11 января 2009

Я хочу получить позицию мыши при обратном вызове тайм-аута.

Насколько я могу судить, это нельзя сделать напрямую. Обходной путь может заключаться в том, чтобы установить событие onmousemove в document.body и сохранить эту позицию, выбирая позже. Однако это будет довольно дорого, и не самый чистый подход.

Ответы [ 3 ]

2 голосов
/ 11 января 2009

Я думаю, вам придется сделать то же самое, что и @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>
0 голосов
/ 11 января 2009

Как вы описали, самый простой способ сделать это - установить обработчик события onmousemove на теле. Это дешевле, чем вы думаете: очень мало вычислений выполняется для сохранения координат, и событие вызывается от 50 до 100 раз в секунду при движении мыши. И я подозреваю, что обычный пользователь не будет постоянно двигать мышью при просмотре веб-страницы.

Следующий скрипт помогает подсчитывать обработчики событий; на моей машине, перемещая мышь в Firefox, это добавило 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>
0 голосов
/ 11 января 2009

Прямой ответ: нет , но, как вы правильно сказали, вы можете прикрепить события ко всему и опрашивать соответственно. было бы дорого делать серьезное программирование для каждого экземпляра onmousemove, поэтому вам может быть лучше создать несколько зон вокруг страницы и опросить событие onmouseover.

Другой альтернативой было бы (и я не уверен, работает ли это вообще) установить повторяющееся время ожидания:

  1. Добавление обработчика onmousemove к телу
  2. Переместить всю страницу (например, изменить поле наверху тела)
  3. когда срабатывает обработчик onmousemove, найдите позицию и удалите обработчик. Вам также может понадобиться тайм-аут для этого события (например, когда мышь находится вне области просмотра)

Uberhack, но он может работать.

...