6

ノードの子が削除または追加されたときの変更をリッスンする方法が必要です。新しいアイテムが追加されたときに要素を一番下までスクロールする自動スクロール プラグインを作成しました。私が聞いているイベントはDOMNodeInsertedandDOMNodeRemovedです。

と のポリフィルを探していましDOMNodeInsertedDOMNodeRemoved。周りを見回しても、すでに存在しているものは見つかりませんでした。このイベントはすべてのブラウザーでサポートされているわけではなく、現在は推奨されていません。簡単に作成した単純な (単純な可能性が高い) ポリフィルがありますが、うまく機能するとは思えません。

これらのイベントが非推奨であることは知っていますが、要素の子の変更をリッスンするより良い方法はありますか?

(function() {
    var works = false;
    var $test = document.createElement("div");
    var $testchild = document.createElement("a");

    $test.addEventListener("DOMNodeInserted", function() {
        works = true;
    }, false);

    $test.appendChild($testchild);

    if(!works) {
        var nodeproto = Node.prototype;
        var nativeAppend = nodeproto.appendChild;
        var nativeRemove = nodeproto.removeChild;

        nodeproto.appendChild = function() {
            nativeAppend.apply(this, arguments);
            this.fireEvent("DOMNodeInserted");
        };

        nodeproto.removeChild = function() {
            nativeRemove.apply(this, arguments);
            this.fireEvent("DOMNodeRemoved");
        };
    }
})();
4

1 に答える 1

2

sにフォールバックする代わりに、クローンの間隔チェックを使用するための合理的に準拠したポリフィルを作成することになりました(@plalxがコメントで言及したものと同様) 。ほとんどのシナリオでは、ポーリングと割り込みの実装よりもパフォーマンスが向上しますが、互換性は最悪ですMutationObserverchildListMutationEventMutationEvent

私のシムを使用した簡単な自動スクロールの例

于 2013-11-19T23:07:29.877 に答える