Как работает запуск mousemove в Javascript?

У меня есть объект, который печатает позиции мыши x и y при каждом движении мыши.

Это что-то вроде этого:

$('#canvas').mousemove(function(e){
    $('#output').prepend(e.pageX + ',' + e.pageY);
});

Я заметил, что когда вы очень быстро перемещаетесь по объекту, он печатает только несколько позиций.

Я не совсем недоволен тем, что он это делает (потому что было бы довольно утомительно, если бы он что-то делал для всех сотен пикселей, которые вы пересекли), но мне интересно, как это работает.

Событие mousemove ограничено определенным количеством триггеров в секунду или что?

(Кстати: это было протестировано на Chromium в Ubuntu Linux)


person skerit    schedule 11.05.2011    source источник
comment
Я думаю, что это действительно зависит от используемого браузера и компьютера; возможно, больше памяти/быстрее процессор === больше итераций за x раз. Так что в таком виде я бы не сильно зависел от mousemove.   -  person Shaz    schedule 11.05.2011


Ответы (3)



Вы можете посмотреть на это, так как это может зависеть от браузера,

http://javascript.info/tutorial/mouse-events#mousemove-and-mouseover-frequency, но, если вы посмотрите на этот вопрос, есть предложение о том, как получить лучший ответ.

Как установить скорость обновления mousemove?

person James Black    schedule 11.05.2011

Я думаю, что это синхронно. Он не срабатывает для каждого пикселя, в котором вы перемещаете мышь, что означает, что события не ставятся в очередь.

Скажите, есть ли у вас такой код.

$('#canvas').mousemove(function(e){
//Some code which takes seconds to execute 
//All subsequent events won't be dispatched while this event handler is executing. 
});

Скажем, если вы переместите мышь во время выполнения обработчиков событий перемещения мыши. Обработчик mousemove не будет запущен.

Вот пример обработчика, выполнение которого займет несколько секунд. --> http://jsfiddle.net/78Hf3/1/

И тот, который занимает совсем немного времени --> http://jsfiddle.net/78Hf3/2/

person Jishnu A P    schedule 11.05.2011