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ブロックUIプラグインと一緒に使用されます:

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

UIをブロックする必要があるたびに、2番目のコードスニペットを実行します。ただし、UIのブロックを解除するときは、Block UI APIを使用して削除するだけですが、スクロールイベントハンドラーでは何もしません。UIを何度もブロック/ブロック解除すると、イベントをスクロールするために多くのイベントハンドラーが登録されますが、これは悪いことだと思います。しかし、私はその問題に適切に対処する方法がわかりません。アドバイスしてもらえますか?

4

1 に答える 1

13

jqueryoffを使用する

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

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

この場合、すべてのイベントハンドラーをデタッチしない限り、無名関数は機能しないことに注意してください。

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

「オン」および「オフ」イベントの場合は、「名前空間」を指定することもできます。

// 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 に答える