Pagrindinis » Kodavimas » Kaip naudoti MutationObserver API DOM mazgų pakeitimams

    Kaip naudoti MutationObserver API DOM mazgų pakeitimams

    Štai scenarijus: žurnalas „Rita“ redaguoja savo straipsnį internete. Ji išsaugo savo pakeitimus ir mato pranešimą “išsaugoti pakeitimai!” Tuomet ji pastebi, kad ji praleido klaidą. Ji pataiso ir spustelės “sutaupyti”, kai ji gauna piktas telefono skambutį iš savo viršininko.

    Pasibaigus pokalbiui, ji grįžta į ekraną, mato “išsaugoti pakeitimai!” išjungia savo kompiuterį ir audrų iš biuro.

    Nepaisant to, kad manęs nepavyko pasakyti apie pasakojimą, nuo trumpo scenarijaus pastebėjome, kokių problemų kelia nuolatinis pranešimas. Taigi ateityje mes nusprendžiame, kad tai būtų įmanoma, kai tik įmanoma, ir naudokitės tuo, kuris paskatins vartotoją patvirtinti jį spustelėjęs - arba išnyksta savaime. Naudojant antrąjį, kad gautumėte greitus pranešimus, gera idėja.

    Mes jau žinome, kaip padaryti, kad elementas išnyktų iš puslapio, todėl neturėtų būti problema. Ką turime žinoti kada jis pasirodė? Taigi galime padaryti, kad jis išnyktų po patikimo laiko.

    MutationObserver API

    Apskritai, kai DOM elementas (kaip pranešimas div) arba bet kuriuos kitus mazgų pakeitimus, turėtume žinoti. Ilgą laiką kūrėjai turėjo pasikliauti hacks ir sistemomis dėl to, kad trūksta vietinės API. Bet tai pasikeitė.

    Dabar turime MutationObserver (anksčiau mutacijos įvykiai). MutationObserver yra „JavaScript“ gimtoji objektas, turintis savybių ir metodų rinkinį. Tai leidžia mums stebėkite bet kurio mazgo pakeitimą kaip DOM elementas, dokumentas, tekstas ir kt mazgo pridėjimas arba pašalinimas ir mazgo atributo ir duomenų keitimas.

    Pamatysime geresnio supratimo pavyzdį. Pirmiausia nustatysime, kur paspaudus mygtuką bus rodomas pranešimas, kaip ir Rita. Tada mes sukurti ir susieti mutacijos stebėtoją su šiuo pranešimo laukeliu ir koduoti logiką, kad automatiškai paslėptumėte pranešimą. Savvy?

    Pastaba: Jūs galbūt kada nors paprašėte manęs galvoje “Kodėl gi ne tik paslėpti pranešimą iš mygtuko paspaudimo įvykio savyje „JavaScript“?” Pavyzdžiui, aš neveikiu su serveriu, todėl, žinoma, klientas yra atsakingas už pranešimą ir gali jį paslėpti pernelyg lengvai. Tačiau, kaip ir Rita redagavimo įrankyje, jei serveris yra tas, kuris nusprendžia keisti DOM turinį, klientas gali likti budrus ir laukti.

    Pirma, mes sukuriame sąranką, kad būtų rodomas pranešimas mygtuko paspaudimu.


    var msg = document.querySelector ('# msg'), SUCCESSMSG = "Išsaugoti pakeitimai!"; / * Pridėti mygtuko paspaudimą įvykis * / dokumentas .querySelector („mygtukas“) .addEventListener („spustelėkite“, „ShowMsg“); funkcija showMsg () msg.textContent = SUCCESSMSG; msg.style.background = 'teal';  

    Kai pradėsime pradinį nustatymą, atlikite šiuos veiksmus:

    • Sukurti MutationObserver objektas su vartotojo nustatytu atgalinio ryšio funkcija (funkcija apibrėžiama vėliau paštu). Funkcija bus vykdoma kiekvienoje mutacijoje, kurią pastebėjo MutationObserver.
    • Sukurkite konfigūracijos objektą, norėdami nurodyti, kokių mutacijų reikia stebėti MutationObserver.
    • Susegti MutationObserver į tikslą, kuris yra „msg“ div mūsų pavyzdyje.
    (funkcija startObservation () var / * 1) Sukurkite MutationObserver objektą * / observer = new MutationObserver (funkcija (mutacijos) mutationObserverCallback (mutacijos);), / * 2) Sukurkite konfigūracijos objektą * / config = childList: tiesa; / * 3) Glue'em all * / observer.observe (msg, config); ) (); 

    Toliau pateikiamas sąrašo ypatybių sąrašas konfig objektas, identifikuojantis įvairių rūšių mutacijas. Kadangi mūsų pavyzdyje nagrinėjame tik teksto tekstą, sukurtą pranešimo tekstui, mes naudojome vaikų sąrašas nuosavybė.

    Nustatytų mutacijų rūšys

    Nuosavybė Kai nustatyta tiesa
    vaikų sąrašas Stebimi tikslinių vaikų mazgų įterpimas ir pašalinimas.
    atributai Stebimi tikslo atributų pokyčiai.
    simbolių duomenys Stebimi tikslinių duomenų pokyčiai.

    Dabar į tą atgalinio ryšio funkciją, kuri įvykdoma kiekvienoje stebimoje mutacijoje.

    funkcija mutationObserverCallback (mutacijos) / * Paimkite pirmąją mutaciją * / var mutationRecord = mutacijos [0]; / * Jei buvo pridėtas vaiko mazgas, paslėpkite pranešimą po 2s * / if (mutationRecord.addedNodes [0]! == undefined) setTimeout (hideMsg, 2000);  funkcija hideMsg () msg.textContent = "; msg.style.background = 'nėra'; 

    Kadangi pridedame tik pranešimą div, mes tik paimame pirmąją pastebėtą mutaciją ir patikrinsime, ar įterptas teksto mazgas. Jei įvyksta daugiau nei vienas pokytis, mes galime tik perjungti mutacijos masyvas.

    Kiekviena. \ T mutacijos masyvą vaizduoja objektas MutationRecord su šiomis savybėmis.

    Ypatybės MutationRecord

    Nuosavybė Grąžina
    pridėtiniai kodai Pridėta tuščių mazgų ar mazgų masyvo.
    atributasName Pridėto, pašalinto ar pakeisto atributo nulinis arba pavadinimas.
    atributasNamespace Pridėto, pašalinto ar pakeisto atributo nulinė arba vardų sritis.
    nextSibling Nulinis arba kitas mazgas, kuris buvo pridėtas arba pašalintas.
    oldValue Pakeista netinkama ar ankstesnė atributo ar duomenų vertė.
    ankstesnisSiblingas Nulinis arba ankstesnis mazgo, kuris buvo pridėtas ar pašalintas, brolis.
    pašalintiNod Išimtas mazgų arba mazgų masyvas.
    tikslą Mazgas MutationObserver
    tipas Nustatytos mutacijos tipas.

    Štai ir viskas. mes tiesiog turime įdėti kodą į paskutinį žingsnį.

    Naršyklės palaikymas

    IMAGE: Ar galiu naudoti.Web. 2015 m. Birželio 19 d

    Nuoroda

    • “W3C DOM4 mutacijos stebėtojas.” W3C. Žiniatinklis. 2015 m. Birželio 19 d
    • “MutationObserver.” „Mozilla“ kūrėjų tinklas. Žiniatinklis. 2015 m. Birželio 19 d.