Jquery: дождитесь завершения функции - PullRequest
2 голосов
/ 22 ноября 2011

Моя проблема:

У меня есть несколько (скажем, 10) элементов. При наведении курсора каждый из них выполняет некоторую функцию с анимацией. Я хочу сделать так, чтобы, если функция (и анимация) для одного из элементов была запущена, наведение некоторых других элементов не выполняло функцию.

Например: я поместил элемент «2». Анимация начинается. Когда анимация длится, я наведите элементы «3», «4» и «5». Курсор мыши остается на «5».

Что мне нужно, чтобы, когда анимация для элемента «2» закончилась, а курсор остался над «5», анимация для пяти запускалась автоматически.

Я сделал это так:

var blocked = 0;    

$(".my_element").live('hover',function(){
    if(blocked == 0){
    blocked = 1;
    $(this).find('.content').animate({left:"-=100px"}, function() {
        blocked = 0;
    });

}, function(){

});

но после завершения функции следующая функция не запускается, пока я не покачиваю мышью. Кто-нибудь может помочь? ТНХ

1 Ответ

3 голосов
/ 22 ноября 2011

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

Примерно так:

var blocked, lastHovered, previous;
$(".my_element").live('hover', function(){
    lastHovered = this;
    if (!blocked && this != previous){
      blocked = true;
      previous = this;
      $('.content').animate({left:"-=100px"}, 1000, function() {
        blocked = false;         
        if (lastHovered) {
          $(lastHovered).trigger("mouseenter");
        }
      });
    }
  }, function() {
    lastHovered = false;
  });
...