5

我有这个 jQuery 函数,它通过滚动支持垂直居中元素:

    $.fn.center = function () {
        var self = this;
        this.css("position", "absolute");
        this.css("top", ($(window).height() - this.height()) / 2 + $(window).scrollTop() + "px");            
        $(document).on("scroll", function () {
            self.center();
        });
        return this;
    };

它与 jQuery Block UI 插件一起使用:

    $('#cph')
        .block(finalOptions)
        .find('.blockUI.blockMsg')
        .center();

每次需要阻止 UI 时,我都会执行第二个代码段。但是当我取消阻止 UI 时,我只是简单地使用 Block UI API 将其删除,但我对滚动事件处理程序不做任何事情。如果我多次阻止/取消阻止 UI,我将注册许多事件处理程序来滚动事件 - 我猜这很糟糕。但我不知道如何正确解决这个问题。你能建议吗?

4

1 回答 1

13

使用 jquery关闭

// assume you have a method for reuse purpose
function YourFunction(){
    // do something
};

$(document).on("scroll", YourFunction);
$(document).off("scroll", YourFunction);

请注意,除非您想分离所有事件处理程序,否则匿名函数在这种情况下将不起作用:

$(document).off("scroll");

您还可以在“on”和“off”事件时指定“命名空间”:

// delegate events under the ".validator" namespace
$(document).on("click.validator", function(){
    // do something
});

// remove only event handlers in the ".validator" namespace
$("form").off(".validator");
于 2013-01-28T09:13:53.557 回答