2

我遇到了 setTimeout() 的问题。我希望在鼠标悬停状态下,子菜单在间隔(500 毫秒)后向上滑动。但是 setTimeout() 不起作用。

就像在这个链接中: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);
4

3 回答 3

7

这超出了范围。

var that = this;
setTimeout(function(){
    $(that).stop().animate({'height' : settings.heightx}, settings.speed);
},500);
于 2012-05-31T19:35:00.140 回答
3

利用delay()

所以例如

$(this).delay(500).stop().animate({'height' : settings.heightx}, settings.speed);
于 2012-05-31T19:36:36.733 回答
1

我认为问题取决于元素$(this),当你在 setTimeout 的函数内部时,元素this就不一样了。为什么不尝试将元素保存在 var 中然后执行函数

var foo = this;
setTimeout(function(){
    $(foo).stop().animate({'height' : settings.heightx}, settings.speed);
},500);
于 2012-05-31T19:37:08.170 回答