2009-09-17 1 views
0

Аналогичные проблемы были рассмотрены ранее, но я считаю, что мой немного отличается из-за использования функции bind(). Так или иначе ...JQuery mouseout timeout

$('.overlay').bind("mouseenter",function(){ 
    $(this).fadeTo('slow', 0); 
}).bind("mouseleave",function(){     
    setTimeout(function() { 
    $(this).fadeTo('slow', 1); 
    }, 2000); 
}); 

Я хочу, чтобы исчезнуть из наложения на «MouseEnter», но только постепенно исчезать еще в 2000 мс после «MouseLeave».

У меня есть дополнительный вопрос: когда div .overlay исчезает, мне нужно иметь возможность нажимать на то, что находится под ним. I.e. Мне нужно, чтобы div полностью исчез или сместился вниз по стеку z-index. Однако, если я попытаюсь добавить это, сценарий считает, что мышь оставила div .overlay, поэтому .overlay исчезает.

По той же причине я не могу использовать fadeOut() и fadeIn().

+0

добавлен дополнительный вопрос ... – strangerpixel

ответ

2

Когда тайм-аут this не будет тем, что вы ожидаете. Вы можете создать укупорочные так:

  $('.overlay').bind("mouseenter",function(){ 
        $(this).fadeTo('slow', 0); 
        }).bind("mouseleave",function(){ 
        var $this = $(this);        
        setTimeout(function() { 
          $this.fadeTo('slow', 1); 
          }, 2000); 
      }); 
+0

два вопроса: делает «$» в 'вара $ это = ...' имеет какое-то значение? И что бы '$ (this)' имел в виду в его исходном коде, который вы получили здесь? – idrumgood

+0

Нет, '' '' в 'var $ this' просто для того, чтобы переменная выглядела больше jQueryish. Символ '$' не имеет особого значения в javascript. И его единственный псевдоним для «jQuery» в jQuery. – Eric

+0

отлично работает, спасибо - теперь я вижу, что $ (this), завернутый в функцию setTimeout, относится к чему-то другому. – strangerpixel