Heim > Artikel > Web-Frontend > Implementieren von Editor-Rückgängig- und Rollback-Vorgängen basierend auf der neuen HTML5-Funktion Mutation Observer_html5 Tutorial-Fähigkeiten
Einführung in MutationObserver
MutationObserver bietet Entwicklern die Möglichkeit, angemessen zu reagieren, wenn sich der DOM-Baum innerhalb eines bestimmten Bereichs ändert. Diese API soll das in der DOM3-Ereignisspezifikation eingeführte Mutation-Ereignis ersetzen.
Mutation Observer ist eine Schnittstelle zur Überwachung von DOM-Änderungen. Mutation Observer wird benachrichtigt, wenn Änderungen im DOM-Objektbaum auftreten.
Mutation Observer verfügt über die folgenden Funktionen:
•Es wartet, bis alle Skriptaufgaben abgeschlossen sind, bevor es ausgeführt wird, d. h. auf asynchrone Weise.
•Es kapselt DOM-Änderungsdatensätze zur Verarbeitung in ein Array, anstatt DOM-Änderungen einzeln zu verarbeiten.
•Es kann alle Änderungen beobachten, die in DOM-Knoten auftreten, und es kann auch eine bestimmte Art von Änderungen beobachten
MDN-Informationen: MutationObserver
MutationObserver ist ein Konstruktor, daher müssen Sie beim Erstellen einen neuen MutationObserver übergeben;
Beim Instanziieren von MutationObserver ist eine Rückruffunktion erforderlich, wenn sich der angegebene DOM-Knoten (Zielknoten) ändert
Beim Aufruf wird das Beobachterobjekt mit zwei Parametern an die Funktion übergeben:1: Der erste Parameter ist ein Array, das mehrere MutationRecord-Objekte enthält;
2: Der zweite Parameter ist das Beobachterobjekt selbst
Zum Beispiel:
Der Instanzbeobachter verfügt über drei Methoden: 1: beobachten; 2: trennen; ;;
BeobachtungsmethodeBeobachtungsmethode: Registrieren Sie den Zielknoten, der beobachtet werden muss, beim aktuellen Beobachterobjekt und erhalten Sie eine Benachrichtigung, wenn sich das DOM im Zielknoten ändert (Sie können gleichzeitig auch seine Nachkommenknoten beobachten); Diese Methode erfordert zwei Parameter, der erste ist der Zielknoten und der zweite Parameter ist der Typ, der auf Änderungen überwacht werden muss, bei dem es sich um ein JSON-Objekt handelt. Das Beispiel lautet wie folgt:
Code kopieren
takeRecords
Löschen Sie die Datensatzwarteschlange des Beobachterobjekts und geben Sie ein Array zurück, das das Mutationsereignisobjekt enthält;
MutationObserver eignet sich perfekt zum Implementieren des Wiederherstellens und Rückgängigmachens eines Editors, da alle Änderungen, die innerhalb des angegebenen Knotens auftreten, jedes Mal aufgezeichnet werden. Wenn Sie die herkömmliche Keydown- oder Keyup-Implementierung verwenden, gibt es einige Nachteile, wie zum Beispiel: 1: Scrollen geht verloren, was zu einer ungenauen Scrollposition führt;
2: Fokus verloren;....
Es dauerte ein paar Stunden, ein Management-Plug-in MutationJS für Undo und Redo (Verwaltung von Undo und Rollback) zu schreiben, das über MutationObserver implementiert wurde und verwendet werden kann als separate Plug-in-Einführung: (http://files.cnblogs.com/files/diligenceday/MutationJS.js
):
Der Code lautet wie folgt:
MutationJS如何使사용
那么这个MutationJS如何使사용呢?
Mutationsinstanz mu hat mehrere Methoden:
1: mu.undo()-Operations-Rollback;2: mu.redo() Rollback rückgängig machen;
3: Ob mu.canUndo() zurückoperieren kann, der Rückgabewert ist wahr oder falsch;
4: Ob mu.canRedo() den Rollback abbrechen kann, der Rückgabewert ist wahr oder falsch;5: mu.reset() löscht alle Rückgängig-Listen und gibt Speicherplatz frei
6: mu.without() übergibt einen Funktionsparameter und alle DOM-Operationen innerhalb der Funktion werden von mu nicht aufgezeichnet;
MutationJS implementiert einen einfachen UndoManager als Referenz, der perfekt auf Firefox, Chrome, Google Chrome und IE11 läuft:
Code kopieren
MutationObserver dient zum Ersetzen. Entfernen Sie die ursprüngliche Reihe von Mutationsereignissen, und der Browser überwacht das Hinzufügen, Löschen, Ersetzen usw. aller Elemente unter dem angegebenen Element;
Screenshot der DEMO unter IE:
Browserkompatibilität von MutatoinObserver:
Funktion | Chrom | Firefox (Gecko) | Internet Explorer | Oper | Safari |
---|---|---|---|---|---|
Grundlegende Unterstützung |
18
26 |
14(14) | 11 | 15 | 6.0WebKit |