2012-05-31 2 views
2

У меня проблема с setTimeout(). Я хочу, в состоянии mouseout, что подменю слайдов Up после интервала (500 miliseconds). Но setTimeout() не работает.setTimeout в анимации JQuery

Как и в этой ссылке: http://jsfiddle.net/felipepalazzo/Xyhvn/2/

Код:

(function($){ 
    $.fn.showMenu = function(options){ 

     var settings = $.extend({ 
      height : '40px', 
      speed : '500', 
      heightx : '20px'    
     }, options || {}); 

     return this.each(function(){ 
      var elem = $(this); 
      var menu_timer; 
      elem.hover(function(){ 
       $(this).stop().animate({'height' : settings.height}, settings.speed); 
        }, function(){ 
         //setTimeout(function(){ 
         $(this).stop().animate({'height' : settings.heightx}, settings.speed); 
          //},500); 
        }); 
     });  
    }; 
})(jQuery); 

ответ

7

Это из области видимости.

var that = this; 
setTimeout(function(){ 
    $(that).stop().animate({'height' : settings.heightx}, settings.speed); 
},500); 
+1

Ровно мои мысли +1 .. но вместо того, чтобы из сферы, я бы сказал, '' this' внутри setTimeout' является ' window', а не меню. >> http://jsfiddle.net/Xyhvn/3/ << –

3

Использование delay()

Так, например

$(this).delay(500).stop().animate({'height' : settings.heightx}, settings.speed); 
+0

+1 для хорошего использования 'delay()' –

1

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

var foo = this; 
setTimeout(function(){ 
    $(foo).stop().animate({'height' : settings.heightx}, settings.speed); 
},500); 
Смежные вопросы