使delay()使用插件

时间:2011-06-23 09:42:31

标签: javascript jquery jquery-plugins delay settimeout

我有一个小插件,用于根据几个可变因素设置元素的高度。在页面加载时,我想要一个延迟,以防止高度设置几秒钟。我知道延迟只适用于效果,有没有办法可以将我的插件注册为效果,或者我是否需要以另一种方式执行此操作?

欲望发布代码:

$(".app_advert").delay(10000).set_height(2000);

插件代码:

       //SetHeight plugin
    (function($){
        $.fn.extend({
            set_height: function(time, callback){
                    scroll = $(window).scrollTop();

                    win_height = $(window).height();
                    document_height = $(document).height();


                    footer_height = $('#footer').height();
                    footer_offset = (document_height-(win_height+scroll));
                    footer_remainder = footer_height-footer_offset;

                return this.each(function(){
                    var x = $(this);

                    if(footer_height-footer_offset<=0){
                        height = 0;
                    } else {
                        height = footer_height-footer_offset;
                    }
                    $(x).stop(true, false).animate({bottom: height}, time, function(){
                        if (callback && typeof callback == 'function') { // make sure the callback is a function
                                callback.call(this); // brings the scope to the callback
                            }

                    });
                });
            }
        });

})(jQuery);

2 个答案:

答案 0 :(得分:2)

您需要手动调用jQuerys .queue()。可能看起来像;

$(".app_advert").delay(10000).queue(function() {
    $(this).set_height(2000);
    $(this).dequeue();
});

您甚至可以在该构造后面链接更多排队的方法。请注意,默认情况下,对于要应用于当前包装集的任何其他方法,所有fx methods都排队,调用另一个.queue()

请阅读:http://api.jquery.com/queue

答案 1 :(得分:0)

如何在插件中使用setTimeout。或者甚至更好地使用伪方法使用setTimeout编写自己的延迟插件,以便您可以链接事件。