bubble.js: en 1.6k løsning på et fælles problem

, bubble.js: en 1.6k løsning på et fælles problem,,,,, 75,,,,,,,, 77,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, en af de mest almindelige opgaver i internettets udvikling er begivenhedsplanlægegr.vores javascript kode er normalt lytter til begivenheder er afsendt af dom elementer.  , dette er, hvordan vi får oplysninger fra brugere, nemlig, at han eller hun klik, typer, sammen med vores side, og vi er nødt til at vide, når det sker.tilsætning af tilfælde lyttere er ubetydeligt, men kan være en svær proces, i denne artikel, vil vi se en rigtig sag problem og dets 1.6k løsning.,,,, en af mine venner virker som en junior udvikler.som sådan, at han ikke har en del erfaring med vanilje javascript, men han er nødt til at begynde at bruge rammer som f.eks.   angularjs   og   ember uden at have en grundlæggende forståelse af dom til javascript forhold.i hans tid som junior entreprenør, han fik ansvaret for et lille projekt: en enkelt side kampagne websteder med næsten ingen javascript involveret.han stod over for en lille, men meget interessant problem, der i sidste ende fører mig til at skrive boble. js,.,, forestille sig, at vi har en pop - up -.en flot i aften, < div > element:,, < div klasse = "pop - up -" >...< /div >,, her er den kode, som vi anvender til at vise et budskab:,, var pop - up - = dokument. queryselector (. pop - up - '), var showmessage = funktion (msg) (popup.style.display = "blok, popup.innerhtml = mng.}.showmessage ('loading.vent venligst. "), har vi en anden funktion, hidemessage, der ændrer, display, ejendom, ingen og gemmer den pop - up -.denne tilgang kan arbejde på den mest generiske tilfælde, men har stadig nogle problemer.  , f.eks. siger, at vi har brug for til at gennemføre yderligere logik, hvis spørgsmål ind i en efter en.lad os sige, at vi er nødt til at tilføje to knapper til indholdet af pop - up - - ja, og nej,.,, var indhold = "er du sikker?< br /> « indhold + = < en href = "#" klasse = "pop - up - - ja" > ja < /a > « indhold + = < en href = "#" klasse = "pop - up - - - nej" > nr. < /a > «. showmessage (indhold);,, hvor vi ved, at brugeren klik på dem?vi er nødt til at tilføje, at hvis lyttere hver og en af de forbindelser.  , f.eks.:,, var addlisteners = funktion (yescb, nocb) (pop - up -. queryselector (. pop - up - - ja "). addeventlistener ('click, yescb) pop - up -. queryselector (. pop - up - - - nej addeventlistener). ('click, nocb)} showmessage (indhold) addlisteners (function() (konsol. log (ja - knappen klikker)}, function() (konsol. log ('" klik ");}), koden over værker i første løb.hvad nu, hvis vi skal have en ny knap, eller endnu værre, hvis vi har brug for en anden form for knap?det er, hvad vi skal fortsætte med  , < en >, elementer, men med forskellige klasse navne?vi kan ikke anvende de samme, addlisteners, funktion, og det er ærgerligt, at skabe en ny metode for hver ændring af pop - up -., her er, hvor problemer bliver synlige:,,, er vi nødt til at tilføje de lyttere igen og igen.vi har faktisk at gøre det hver gang, når html i pop - up - s < div >, er ændret, kan vi lægge begivenhed lyttere, hvis indholdet af pop - up - ajourføres.først efter, showmessage, der ringer.vi er nødt til at tænke på det hele tiden, og jeg de to processer, den kode, der tilføjer lyttere har en hård afhængighed -, pop - up -, variabel.vi er nødt til at ringe til sin, queryselector, funktion i stedet for dokument. queryselector,.ellers kan vi vælge en forkert element, når vi ændrer logik i det budskab, som vi er nødt til at ændre de politiske og sandsynligvis, addeventlistener, kalder.det er ikke tørt på.,,, der må være en bedre måde at gøre det på. ja, der er en bedre fremgangsmåde.og nej, løsningen er ikke at bruge en ramme, inden for at afsløre. det svar, lad os tale lidt om begivenhederne i den dom træ.,, forståelse, hvis håndtering, begivenheder, der udgør en væsentlig del af web - udvikling.de tilføjer interaktive til vores ansøgninger og fungere som bro mellem forretningslogikken og bruger.enhver dom element kan sende begivenheder.alt vi skal gøre er at tegne disse begivenheder og behandle de modtagne begivenhed objekt.,, der er et udtryk   tilfælde formering, der står bag, begivenhed boble, og tilfælde at fange, som begge er to måder, hvis behandling i dom.lad os anvende følgende - og se forskellen mellem dem.,, < div klasse = "papir" > < en href = "#" > klik mig < /a > < /div >, lægger vi, klik hvis de, til begge elementer.da der er satte ind i hinanden, de vil modtage, klik,.,, dokument. queryselector (. papir). addeventlistener ('click, funktion (e) (konsol. log (. papir klik)}); dokument. queryselector (»a«). addeventlistener ('click, funktion (e) (konsol. log ('klik');});,, når vi trykker på forbindelsen ser vi følgende output i konsol:,, et klik. papir sammen, så de to elementer modtager, klik, begivenhed.for det første forbindelsen og så, < div >,.det er det, der er i kraft.fra det dybeste mulige elementer til sine forældre.der er en måde at stoppe den boble.hver eneste kontaktperson, modtager en begivenhed objekt, som er stoppropagation, metode:,, dokument. queryselector (»a«). addeventlistener ('click, funktion (e) (f. stoppropagation(); konsol. log ('klik');}), ved hjælp af, stoppropagation, funktion, der viser, at begivenheden bør ikke sendes til forældrene.,, nogle gange kan vi blive nødt til at ændre rækkefølgen og tilfælde omfattet af den ydre del.for at opnå dette, er vi nødt til at bruge en tredje parameter, addeventlistener,.hvis vi vedtager, rigtigt, som en værdi, vi vil gøre, e, afløb for at fange.for eksempel:,, dokument. queryselector (. papir). addeventlistener ('click, funktion (e) (konsol. log (. papir klik)}, sande); dokument. queryselector (»a«). addeventlistener ('click, funktion (e) (konsol. log ('klik)}, sande), det er sådan, vores - proces, de begivenheder, da vi interagere med side.,, løsningen, så hvorfor har vi brugt en del af artikel taler om boble og fanger, vi har nævnt dem, fordi der er svaret på vores problemer med pop - up -.vi skal sætte tilfælde lyttere ikke de bånd, men at den < div > direkte.,, var indhold = "er du sikker?< br /> « indhold + = < en href = "#" klasse = "pop - up - - ja" > ja < /a > « indhold + = < en href = "#" klasse = "pop - up - - - nej" > nr. < /a > « var addlisteners = function() (pop - up -. addeventlistener ('click, funktion (e) (var - link = e.target.})} showmessage (indhold) addlisteners();, ved at følge denne fremgangsmåde, vi fjerner de emner, der er opført i begyndelsen.,,, - - er der kun ét tilfælde til at lytte, og vi tilføjer det én gang.uanset hvad vi satte i den pop - up -, fangst af de begivenheder, der vil ske i deres forældre. og vi er ikke bundet til yderligere indhold.vi ved med andre ord ikke ligeglad, når den, showmessage, kaldes.så længe det, pop - up -, variabel er i live, vil vi fange de begivenheder,.,, fordi vi kalder, addlisteners, når vi bruger, pop - up -, variable også engang.vi behøver ikke at beholde det eller give det mellem de metoder,.,, vores kodeks blev fleksible, fordi det valgte vi ikke bekymrer sig om html gik til, showmessage,.vi har adgang til det klikkede anker i den  , e.target viser, at presset element.,,, ovennævnte adfærdskodeks er bedre end det, vi startede med.men stadig ikke fungerer på samme måde.som vi sagde, e.target, viser, at der klikkede, < en >, tag.vi vil bruge det til at skelne, ja og nej, knapper, var addlisteners = funktion (callbacks) (pop - up -. addeventlistener ('click, funktion (e) (var - link = e.target, var buttontype = link. getattribute ('class'); hvis (callbacks [buttontype]) (callbacks [buttontype] (e)))).addlisteners ({"pop - up - - - ja. function() (konsol. log (ja)}, pop - up - - - nej. function() (konsol. log (')}}), er vi ude af værdien af den klasse, attribut, og bruge det som en nøgle.de forskellige klasser til forskellige callbacks.,, men det er ikke en god idé at bruge, klasse, attribut.det er forbeholdt anvender visuelle stil det element, og dens værdi kan ændre sig til enhver tid.som javascript udviklere, vi skal bruge, data, attributter.,, var indhold = "er du sikker?< br /> « indhold + = < en href = "#" data "ja" class action = = "pop - up - - ja" > ja < /a > « indhold + = < en href = "#" data action = "nej" klasse = "pop - up - - - nej" > nr. < /a > «, vores kodeks bliver lidt bedre.vi kan fjerne de citater, der anvendes i addlisteners, funktion:,, addlisteners ({ja: function() (konsol. log (ja)}, ikke function() (konsol. log (')}}), kan resultatet blive set i dette jsbin.,,, jeg bubble.js, anvendt opløsningen over i flere projekter, så giver det ikke mening, at det er et bibliotek.det hedder bubble.js, og den er til rådighed i github.det er 1.6k dossier, som gør præcis, hvad vi gjorde.,, lad os omdanne vores pop - up - f.eks. at bruge, boble. js,.den første ting, vi er nødt til at ændre, er den, der anvendes af avancen:,, var indhold = "er du sikker?< br /> « indhold + = < en href = "#" data boble action = "ja" klasse = "pop - up - - ja" > ja < /a > « indhold + = < en href = "#" data boble action = "nej" klasse = "pop - up - - - nej" > nr. < /a > «, i stedet for, data, vi skal bruge data boble aktion.,, når vi er bubble.min.js, på vores side, og vi har en global, boble, funktion, der er til rådighed.det accepterer en dom element i komitéen og returnerer bibliotekets api - grænseflade.det, den metode, er den, der tilføjer lyttere:,, boble (. pop - up - '). på (»ja«, function() (konsol. log (ja)}). (' '), function() (konsol. log (')}), er der også en alternativ syntaks:,, boble (. pop - up - '). den ({ja: function() (konsol. log (ja)}, ikke function() (konsol. log (')}}), ved misligholdelse,  , bubble.js, lytter til, klik, begivenheder, men der er en mulighed for at ændre det.lad os tilføje en input - område og lytter til, keyup begivenhed:,, < input type = "tekst" data boble action = "keyup: input - />,, javascript fører stadig modtager tilfælde genstand.så, her er vi i stand til at vise teksten i området:,, boble (. pop - up - '). den ({...input: funktion (e) (konsol. log (den nye værdi: + e.target. værdi);}}), og vi er nødt til at fange ikke én, men mange hændelser er afsendt af samme element.data boble, accepterer flere værdier adskilt af komma:,, < input type = "tekst" data boble action = "keyup: input, blur: inputblurred" />, finder den endelige variant i en jsbin her.,, fallbacks, er den løsning, der er fastsat i denne artikel, er fuldstændig i tilfælde, der bobler.i nogle tilfælde e.target, ikke til det element, som vi har brug for.  , f.eks.:,, < div klasse = "papir" > < en href = "#" > - < span > vælge < /levetid, og gt mig!< /a > < /div >,, hvis vi sætter vores mus over "at vælge"   og udføre et klik, element, at forsendelser tilfælde ikke er det, < en >, - men, kalibrering, element.,,,, ganske vist er kommunikation med dom er en vigtig del af vores anvendelse af udviklingen, men det er almindelig praksis, at vi bruger rammer bare for at omgå denne meddelelse.  , mener vi ikke, at føje lyttere igen og igen.vi kan ikke lide debugging - underligt dobbelt tilfælde med insekter.sandheden er, at hvis vi ved, hvor de browser virker, er vi i stand til at løse disse problemer.,, bubble.js er et resultat af et par timer i læsning og en time kodning - det er vores 1.6k løsning på et af de fælles problemer.



Previous:
Next Page: