0

JQuery はカスタム イベントを強力にサポートしています - .bind("foo", function(e).... しかし、イベントをトリガーするメカニズムがまだ準備できておらず、イベントがバインドされている要素でのみ構築する必要がある場合はどうなるでしょうか?

たとえばscrollin、要素がビューポートにスクロールされたときに発生するイベントが必要です。これを行うには、onscrollすべての要素とtrigger scrollin、ビューポートの外側にあり、現在は内側にある要素をチェックする必要があります。これは受け入れられません。

高速化にはコツがあります。たとえば、このプラグインの 1 つは「private」のすべての要素をチェックし、イベントがバインドさ$.cacheれている要素のみをチェックします。scrollin

しかし、それはまた醜いです。私が必要とするのは、要素を何らかのキャッシュ配列に入れることである、スクロール管理を処理するイベントのバインディングのための追加のコールバック (処理のためのコールバックに追加) です。elementsCheckOnScrol

私は次のようなものを探しています:

$.delegateBind("scrollin", function(jqSelection) { ... });
element.bind("scrollin", function(e) {..}); //Calls ^ after internal bind management

編集:これはいいAPI​​でしょう!

$.bind("bind", function(onWhat) { ... }) 

:-)

4

2 に答える 2

0

APIを見つけました$.event.specialが、それが「どのくらい」公開されているかわかりません。ドキュメントには記載されておらず、少なくとも一度は変更されています。http://benalman.com/news/2010/03/jquery-special-events/

于 2011-08-23T16:19:23.780 に答える
0

私があなたを誤解していなければ、次のbindようにメソッドにパッチを当てることができます:

(function($) {
    var oldBind = $.fn.bind;

    $.fn.bind = function(name) { 
        if(name === "scrollin") {
             delegateFunction(this);
        }

        oldBind.apply(this, arguments);
    };
})(jQuery);

a がバインドされているかどうかを確認し、scrollinバインドされている場合はデリゲート関数を呼び出します。その後、通常のようにすべての jQuery を実行する元の bind 関数を呼び出すだけです。

このコードを追加すると、 http://jsfiddle.net/pimvdb/g4k2G/のように使用できます。

function delegateFunction(selection) {
    alert(selection.length);
}

$('a').bind('scrollin', function() {});

.bindこれは( のみ)に渡されるオブジェクト リテラルをサポートしていないことに注意してください。ただし(name, func)、それを実装することもできます。

于 2011-08-23T16:00:05.503 に答える