de.hideout-lastation.com
Paradies Für Designer Und Entwickler


Verwendung der MutationObserver-API für DOM-Knotenänderungen

Hier ist ein Szenario: Rita, eine Magazinautorin, bearbeitet einen Artikel von ihr online. Sie speichert ihre Änderungen und sieht die Meldung "Änderungen gespeichert!" In diesem Moment bemerkt sie einen Tippfehler, den sie verpasst hat. Sie behebt es und will gerade auf "Speichern" klicken, als sie einen wütenden Anruf von ihrem Chef bekommt.

Nachdem der Anruf beendet ist, kehrt sie zum Bildschirm zurück, sieht "Änderungen gespeichert!", Schaltet ihren Computer aus und stürmt aus dem Büro.

Abgesehen von meiner Unfähigkeit, Geschichten zu erzählen, bemerkten wir aus diesem kurzen Szenario, welche Schwierigkeiten diese persistente Nachricht gebraut hatte. In Zukunft werden wir daher versuchen, dies möglichst zu vermeiden und einen Benutzer zu verwenden, der ihn entweder durch Anklicken anklickt oder von selbst verschwindet . Die Verwendung der zweiten für eine schnelle Nachricht ist eine gute Idee.

Wir wissen bereits, wie man ein Element von einer Seite verschwinden lässt, also sollte das kein Problem sein. Was müssen wir wissen, wann ist es erschienen? So können wir es nach einer plausiblen Zeit verschwinden lassen.

MutationObserver-API

Wenn sich ein DOM-Element (wie ein Nachrichten- div ) oder ein anderer Knoten ändert, sollten wir es insgesamt wissen können. Entwickler mussten sich lange auf Hacks und Frameworks verlassen, da eine native API fehlte. Aber das hatte sich geändert.

Wir haben jetzt MutationObserver (früher Mutation Events). MutationObserver ist ein natives JavaScript-Objekt mit einer Reihe von Eigenschaften und Methoden. Es erlaubt uns , eine Änderung an jedem Knoten wie DOM-Element, Dokument, Text usw. zu beobachten. Mit Mutation meinen wir das Hinzufügen oder Entfernen eines Knotens und Änderungen an den Attributen und Daten eines Knotens .

Lassen Sie uns ein Beispiel zum besseren Verständnis sehen. Wir werden zuerst eine Einrichtung einrichten, bei der eine Nachricht auf Knopfdruck erscheint, wie die, die Rita sah. Dann erstellen und verknüpfen wir einen Mutationsbeobachter mit dieser Nachrichtenbox und codieren die Logik, um die Nachricht automatisch auszublenden . Kapieren?

Hinweis : Sie können irgendwann in meinem Kopf oder schon gefragt haben: " Warum verstecken Sie nicht einfach die Nachricht aus dem Button Click Event selbst in JavaScript? "In meinem Beispiel arbeite ich nicht mit einem Server, also ist der Client natürlich dafür verantwortlich, die Nachricht zu zeigen und kann sie zu leicht verstecken. Aber wie in Ritas Bearbeitungswerkzeug, wenn der Server derjenige ist, der den DOM-Inhalt ändert, kann der Client nur wachsam bleiben und warten.

Zuerst erstellen wir das Setup, um die Nachricht beim Klick auf die Schaltfläche anzuzeigen.


 var msg = document.querySelector ('# msg'), SUCCESSMSG = "Änderungen gespeichert!"; / * Add button click event * / Dokument .querySelector ('button') .addEventListener ('click', showMsg); Funktion showMsg () {msg.textContent = SUCCESSMSG; msg.style.background = 'aquamarin'; } 

Sobald wir die Ersteinrichtung ausgeführt haben, können wir Folgendes tun:

  • Erstellen Sie ein MutationObserver Objekt mit einer benutzerdefinierten Rückruffunktion (die Funktion wird später im Post definiert). Die Funktion wird bei jeder vom MutationObserver beobachteten MutationObserver .
  • Erstellen Sie ein Konfigurationsobjekt, um die Art der Mutationen anzugeben, die vom MutationObserver beobachtet werden sollen.
  • Binden Sie den MutationObserver an das Ziel, das in unserem Beispiel das 'msg'- div .
 (function startObservation () {var / * 1) Erzeuge ein MutationObserver-Objekt * / observer = new MutationObserver (Funktion (Mutationen) {mutationObserverCallback (Mutationen);}), / * 2) Erstelle ein Config-Objekt * / config = {childList: wahr}; / * 3) Glue'em all * / observer.observe (msg, config); }) (); 

Im Folgenden finden Sie eine Liste von Eigenschaften für das config, die die verschiedenen Arten von Mutationen identifizieren. Da wir in unserem Beispiel nur einen childList behandeln, der für den Nachrichtentext erstellt wurde, haben wir die Eigenschaft childList .

Arten von Mutationen beobachtet

EigentumWenn auf " true
KinderlisteDas Einfügen und Entfernen der Kindknoten des Ziels wird beobachtet.
AttributeÄnderungen in den Attributen des Ziels werden beobachtet.
zeichenDatenÄnderungen der Zieldaten werden beobachtet.

Nun zu dieser Callback-Funktion, die bei jeder beobachteten Mutation ausgeführt wird.

 Funktion MutationObserverCallback (Mutationen) {/ * Besorgen Sie sich die erste Mutation * / var mutationRecord = Mutationen [0]; / * Wenn ein untergeordneter Knoten hinzugefügt wurde, verstecke die Nachricht nach 2s * / if (mutationRecord.addedNodes [0]! == undefined) setTimeout (hideMsg, 2000); } function hideMsg () {msg.textContent = ''; msg.style.background = 'none'; } 

Da wir dem div nur eine Nachricht hinzufügen, nehmen wir einfach die erste beobachtete Mutation und prüfen, ob ein Textknoten eingefügt wurde. Wenn mehr als eine Änderung eintritt, können wir einfach das mutations Array durchlaufen.

Jede Mutation im mutations Array wird durch das Objekt MutationRecord mit den folgenden Eigenschaften repräsentiert.

Eigenschaften von MutationRecord

EigentumKehrt zurück
addedNodesLeeres Array oder Array von Knoten hinzugefügt.
AttributnameNull oder Name des Attributs, das hinzugefügt, entfernt oder geändert wurde
AttributNamespaceNull oder Namespace des Attributs, das hinzugefügt, entfernt oder geändert wurde
nextSiblingNull oder nächstes Geschwister des Knotens, der hinzugefügt oder entfernt wurde
alterWertNull oder vorheriger Wert des Attributs oder der Daten geändert.
vorherigeSiblingNull oder vorheriges Geschwister des Knotens, der hinzugefügt oder entfernt wurde
removedNodesLeeres Array oder Array von Knoten, die entfernt wurden.
ZielVom MutationObserver abgezielter Knoten
ArtArt der beobachteten Mutation

Und das ist es. Wir müssen den Code nur für den letzten Schritt zusammensetzen.

Browserunterstützung

Referenz
  • "W3C DOM4 Mutation Observer." W3C. Netz. 19. Juni 2015
  • "MutationObserver." Mozilla-Entwickler-Netzwerk . Netz. 19. Juni 2015.

375.000 Kunststücke, die Sie ohne Einschränkungen verwenden können

375.000 Kunststücke, die Sie ohne Einschränkungen verwenden können

Im Jahr 2014 fertigte das New Yorker Metropolitan Museum of Art 400.000 hochauflösende Bilder von verschiedenen Kunstwerken und Fotografien für den öffentlichen Gebrauch. Im Jahr 2017 hat das Metropolitan Museum weitere 375.000 Bilder ohne Einschränkungen für die Öffentlichkeit zur Verfügung gestellt .Die En

(Tech- und Design-Tipps)

8 Windows Zeiterfassung Apps für bessere Produktivität - Best Of

8 Windows Zeiterfassung Apps für bessere Produktivität - Best Of

Wenn Sie eine hohe Produktivität bei der Arbeit anstreben, ist es sehr wichtig, den Zeitaufwand für die Arbeit im Auge zu behalten . Und ein guter Weg, um es zu tun ist, indem Sie sich eine Zeiterfassung App. Eine Zeiterfassungs-App verfolgt die Aktivitäten auf Ihrem PC und wie viel Zeit Sie damit verbracht haben, zu arbeiten oder herumzualbern .We

(Tech- und Design-Tipps)