Остановить события очереди jquery

#jquery

#jquery

Вопрос:

Итак,

У меня запущен этот демонстрационный сайт:

http://webspirited.com/ha2/

При наведении курсора мыши на основной заголовок (не в ie). Вы заметите, что изображение немного изменится,

Это то, чего я хочу.

Однако проницательный глаз заметит, что при наведении курсора мыши вкл-выкл-вкл-выкл-вкл-выкл события будут поставлены в очередь.

Как мне остановить это поведение?

Ответ №1:

jQuerys .stop() приходит на помощь.

 $('#element').stop(true, true).animate({});
  

Если вы выполняете какую-либо анимацию с помощью jQuery, stop() очередь завершится. Первый параметр указывает, следует ли очищать всю очередь, второй параметр указывает, следует ли переходить к концу текущей запущенной анимации.

Другой вариант, который у вас есть здесь, — проверить, анимирован ли элемент в данный момент или нет, и если да, просто пропустите новый .animate метод. Пример:

 $('#element').hover(function(){
   if(!$(this).is(':animated'){  // only go in here if $(this) is NOT animated
      // $(this).animate({});
   }
}, function(){
});
  

Ссылка.: .stop(), :анимированный

Комментарии:

1. .остановить(true,false). сработало идеально. Моя единственная проблема заключается в том, что после вызова stop (например, при выключенной мыши) это вызывает небольшую задержку. Почему это?

Ответ №2:

Взгляните на этот плагин: http://cherne.net/brian/resources/jquery.hoverIntent.html

hoverIntent — это подключаемый модуль, который пытается определить намерения пользователя… как хрустальный шар, только с движением мыши! Это работает как (и было производным от) встроенного в jQuery hover. Однако, вместо немедленного вызова функции onMouseOver, она ожидает, пока мышь пользователя не замедлится достаточно, прежде чем выполнить вызов.