2013-03-06 4 views
0

Я написал код, чтобы изменить цвет каждой буквы внутри тега и показать всплывающее окно, когда вы наведете ссылку.Mouseleave не работает с .each и delay?

Функция mouseenter отлично работает, но когда вы наводите ссылку на ссылку, я хотел бы сделать обратную ссылку на исходное изменение (так что вернемся к исходному цвету).

Я беру задержку из функции отпуска, она работает, но эффект не такой приятный. Я смущен, почему это работает на въезде, но не в отпуск?

Еще одна вещь, которая стоит упомянуть, когда она меняет цвет обратно на серый, функция mouseenter не работает снова, что вызывает раздражение.

Вот ссылка на сайт, чтобы вы могли видеть то, что я говорю, и связь является один в нижней части, которая говорит «сенсорный маркетинг»

http://dev.touch-akl.com/colin/

Любая помощь, пожалуйста?

Мой JQuery выглядит следующим образом

$('#copyright a').mouseenter(function(){ 

    var $letters = $(this).find('span'), 
    $sayhi = $(this).find('img'), 
    delay = 0; 

    $sayhi.animate({top:-30, 'opacity':1}, 500, "easeInOutExpo"); 

    $letters.each(function(){ 

     $(this).delay(delay).queue(function(){ 
      $(this).css({'color':'#333'}); 
     }); 

     delay+=35;  

    }); // end each 

}).mouseleave(function(){ 

    var $letters = $(this).find('span'), 
    delay = 0; 

    $letters.each(function(){ 

     $(this).delay(delay).queue(function(){ 
      $(this).css({'color':'#333'}); 
     }); 

     delay+=35;  

    }); 

}); // end leave 

ответ

1

JQuery .queue() осложнена правильно использовать так, если Вы не должны взаимодействовать с другими вещами в очереди анимации JQuery, часто бывает много, гораздо проще использовать setTimeout() как это. Вы также должны сделать локальную переменную delay, поэтому она не является неявной глобальной переменной.

}).mouseleave(function(){ 
    var delay = 0; 
    $(this).find('span').each(function(){ 
     var item = $(this); 

     setTimeout(function(){ 
      item.css({'color':'#333'}); 
     }, delay); 

     delay+=35;  
    }); 
}); // end leave 
+0

Спасибо, что у меня были проблемы с .queue() до того, как метод setTimeout() работает намного лучше! –

-2

Скорее всего, проблема связана с закрытием, созданным вашими функциями в mouseenter и mouseleave. Они оба ссылаются на одну и ту же переменную . Возможно, вы захотите их разделить:

delayEnter = 0; 
delayLeave = 0; 
+0

Плохая форма для использования глобальной переменной для 'delay', но ссылка на' delay' в коде OP не задерживается, поэтому я не вижу, как это исправит проблему. 'delay' сам по себе вообще не ссылается на время. – jfriend00

+0

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

+0

Но это не устраняет проблему. – jfriend00

Смежные вопросы