2011-01-02 1 views
1

Я использую функцию mousemove ({}). Я хочу, чтобы эту функцию mousemove вызывали только в том случае, если ее последний раз вызывал не менее 1 секунды назад. Я знаю, что я могу использовать какой-то таймер и поставил условиеjQuery check mousemover каждые x ms

if(cur_time - last_time > 1) 
    do_the_stuff(); 
  1. Есть ли лучший способ сделать это?
  2. Если нет, то какую функцию я должен использовать, чтобы получить cur_time (или получить время)?

ответ

2

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

var last_moved; 
$(document).mousemove(function(e){ 
    if (!last_moved || (e.timeStamp - last_moved > 1000)) { 
     do_the_stuff(); 

     last_moved = e.timeStamp; 
    } 
}); 

См a working example on jsFiddle.

+0

Для меня это работает странно на jsFiddle ... Я посмотрю – Cristy

+0

@Cristy Я исправил очевидную проблему, которая заключалась в том, что обработчик не был активирован при первом указателе мыши. Посмотрите на новую ссылку. – lonesomeday

+0

Хорошо, я нашел вашу «ошибку»: D http://jsfiddle.net/bY3CC/3/. Последний_возбужден должен быть поднят только внутри if(), потому что это происходит, когда происходит «last_move»: D – Cristy

0

Нет, это не лучший способ это сделать. Поместите это заявление в mousemove, и вы должны получить то, что вам нужно.

+0

Хорошо, как использовать таймер? Как я могу получить cur_time? – Cristy

+0

Вызов setTimeout() при загрузке страницы; захватить last_time в глобальной переменной. – Tahbaza

+1

См. Http://api.jquery.com/event.timeStamp/, чтобы получить текущее время. –