设置JQuery动画中的超时

setTimeout in a JQuery animation

本文关键字:超时 动画 JQuery 设置      更新时间:2023-09-26

我在使用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);

超出了范围。

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

使用 delay()

所以例如

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

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

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