Kako ustvariti animirani Favicon Loader z JavaScript
Favicons so ključni del spletne blagovne znamke dajte vizualno opombo uporabnikom in jim pomagali razlikujejo vaše spletno mesto od drugih. Čeprav je večina favicons statičnih, je mogoče ustvarite animirane favikone prav tako.
Nenehno gibajoč favikon je zagotovo nadležen za večino uporabnikov, hkrati pa škoduje dostopnosti, vendar le, če je animiran le za kratek čas. kot odgovor na dejanje uporabnika ali dogodek v ozadju, na primer nalaganje strani, lahko zagotavljajo dodatne vizualne informacije-izboljšanje uporabniške izkušnje.
V tej objavi vam bom pokazal, kako ustvariti animirani krožni nakladalnik v platnu HTML, in kako ga lahko uporabite kot ikono. An animirani favicon nakladalnik je odlično orodje vizualizirati napredek vsakega ukrepa na strani, na primer nalaganje datotek ali obdelava slik. Lahko si ogledate demo, ki je del te vadnice na Github prav tako.
1. Ustvarite
element
Najprej moramo ustvarite animacijo na platnu to črpa celoten krog, skupaj 100 odstotkov (to bo pomembno, ko moramo povečati lok).
Za platno uporabljam standardno velikost favikona, 16 * 16 slikovnih pik. Če želite, lahko uporabite velikost, ki je večja od tiste, vendar upoštevajte, da bo slika na platnu 162 območje pikslov ko ga uporabite kot ikono z ikonami.
2. Preverite, če
podpira
V notranjosti onload ()
organizator dogodkov dobite referenco za element platna [cv
] uporabljati querySelector ()
metodo in se nanašajo njegov 2D predmet risanja [ctx
] s pomočjo getContext ()
metodo.
onload = function () cv = document.querySelector ('# cvl'), ctx = cv.getContext ('2d'); če (!! ctx) / *… * /;
Preveriti moramo tudi če platno podpira UA s preverjanjem, ali je predmet konteksta risanja [ctx
] obstaja in ni neopredeljeno. Postavili bomo vse kode, ki pripadajo dogodku nalaganja v to če
stanje.
3. Ustvarite začetne spremenljivke
Ustvarimo tri globalne spremenljivke, s
za začetni kot loka, tc
za id za setInterval ()
časovnika, in pct
za odstotna vrednost istega časovnika. Koda tc = pct = 0
dodeli 0 kot začetno vrednost za tc
in pct
spremenljivk.
onload = function () cv = document.querySelector ('# cvl'), ctx = cv.getContext ('2d'); če (!! ctx) s = 1,5 * Math.PI, tc = pct = 0; ;
Za prikaz vrednosti s
izračunal, naj hitro pojasnim kotne loke delo.
Kotniki loka
The pod kotom (kot, sestavljen iz dveh žarkov, ki določata lok) oboda kroga je 2π rad, kje rad je simbol radianske enote. Zaradi tega je kot za četrtino loka enako 0,5π rad.
Kdaj vizualizacijo napredovanja nalaganja, želimo, da se nariše krog na platnu z najvišjega položaja namesto privzete pravice.
Gremo v smeri urinega kazalca (privzeti lok je narisan na platnu) iz pravega položaja, zgornja točka je doseženi po treh četrtinah, t.j. pod kotom 1.5π rad. Zato sem ustvaril spremenljivko s = 1,5 * Mat.PI
pozneje označuje začetni kot za loke iz platne.
4. Oblikujte krog
Za predmet konteksta risanja definiramo lineWidth
in strokeStyle
lastnosti kroga pripravili bomo v naslednjem koraku. The strokeStyle
lastnina pomeni njeno barvo.
onload = function () cv = document.querySelector ('# cvl'), ctx = cv.getContext ('2d'); če (!! ctx) s = 1,5 * Math.PI, tc = pct = 0; ctx.lineWidth = 2; ctx.strokeStyle = 'fuksija'; ;
5. Narišite krog
Mi dodajte upravljalnik dogodka klikanja na gumb Naloži [# lbtn
] ki sproži nastavitev časovnega intervala od 60 milisekund, ki izvaja funkcijo, odgovorno za risanje kroga [updateLoader ()
] vsakih 60 ms, dokler krog ni povsem narisan.
The setInterval ()
metodo vrne id števca za določitev časovnika, ki je dodeljen tc
spremenljivko.
onload = function () cv = document.querySelector ('# cvl'), ctx = cv.getContext ('2d'); če (!! ctx) s = 1,5 * Math.PI, tc = pct = 0, btn = document.querySelector ('# lbtn'); ctx.lineWidth = 2; ctx.strokeStyle = 'fuksija'; btn.addEventListener ('klik', funkcija () tc = setInterval (updateLoader, 60);); ;
6. Ustvarite updateLoader ()
funkcijo po meri
Čas je, da ustvarite po meri updateLoader ()
funkcijo imenujemo z setInterval ()
metodo ko kliknete gumb (dogodek se sproži). Najprej vam pokažem kodo, potem pa lahko podamo razlago.
function updateLoader () ctx.clearRect (0, 0, 16, 16); ctx.beginPath (); ctx.arc (8, 8, 6, s, (pct * 2 * Math.PI / 100 + s)); ctx.stroke (); if (pct === 100) clearInterval (tc); vrnitev; pct ++;
The clearRect ()
metodo izbriše pravokotno območje platna določeni s svojimi parametri: koordinate (x, y) zgornjega levega kota. The clearRect (0, 0, 16, 16)
vrstico izbriše vse v platnu 16 * 16 slikovnih pik, ki smo ga ustvarili.
The beginPath ()
metodo ustvarja novo pot za risbo in kap ()
metodo na novo ustvarjeni poti.
Na koncu updateLoader ()
funkcijo odstotek številapct
] se poveča za 1, in pred prirastkom smo preverite, ali je 100. Ko je 100 odstotkov, setInterval ()
časovnika (identificira ga id, tc
) se izbriše s pomočjo. \ t clearInterval ()
metodo.
Prvi trije parametri lok()
metode (x, y) koordinate središča loka in njegov polmer. Četrti in peti parameter predstavljata začetni in končni kot pri kateri se risba loka začne in konča.
Odločili smo se že za začetno točko nakladalnega kroga, ki je pod kotom s
, in to bo enako v vseh ponovitvah.
Končni kot pa bo povečanje z odstotnim številom, lahko izračunamo velikost prirastka na naslednji način. Recimo 1% (vrednost 1 od 100) je enako kotu α od 2π v krogu (2π = kot celotnega oboda), potem lahko isto zapišemo kot naslednjo enačbo:
1/100 = α/ 2π
Po prerazporeditvi enačbe:
α = 1 * 2π / 100 α = 2π/ 100
Torej je 1% enakovreden kotu 2π/ 100 v krogu. Tako je končni kot med vsakim odstotkom prirastka izračuna z množenjem 2π/ 100 za odstotno vrednost. Potem je rezultat dodano s
(začetni kot), tako so loki iz istega začetnega položaja vsakič. Zato smo uporabili pct * 2 * Math.PI / 100 + s
formula za izračun končnega kota v zgornjem odseku kode.
7. Dodajte ikono za ikono
Postavimo a povezovalni element v HTML neposredno ali prek JavaScripta.
V updateLoader ()
funkcijo, najprej prenesi favicon uporabljati querySelector ()
in jo dodelite lnk
spremenljivko. Potem moramo izvozite platno vsakič, ko se nariše lok v kodirano sliko z uporabo toDataURL ()
metodo, in. \ t dodeli vsebino URI-ja kot sliko favikona. To ustvari animirani favicon, ki je enako kot platneni nakladalnik.
onload = function () cv = document.querySelector ('# cvl'), ctx = cv.getContext ('2d'); če je (!! ctx) s = 1.5 * Math.PI, tc = pct = 0, btn = document.querySelector ('# lbtn'), lnk = document.querySelector ('povezava [rel = "ikona"]') ; ctx.lineWidth = 2; ctx.strokeStyle = 'fuksija'; btn.addEventListener ('klik', funkcija () tc = setInterval (updateLoader, 60);); ; function updateLoader () ctx.clearRect (0, 0, 16, 16); ctx.beginPath (); ctx.arc (8, 8, 6, s, (pct * 2 * Math.PI / 100 + s)); ctx.stroke (); lnk.href = cv.toDataURL ('image / png'); if (pct === 100) clearTimeout (tc); vrnitev; pct ++;
Oglejte si celotno kodo na Githubu.
Bonus: Uporabite nalagalnik za async dogodke
Ko morate uporabiti to platno animacijo v povezavi z nalaganjem na spletni strani, dodelite updateLoader ()
funkcijo kot nadzornik dogodkov za napredek ()
dogodka.
Na primer, naš JavaScript se bo tako spremenil v AJAX:
onload = function () cv = document.querySelector ('# cvl'), ctx = cv.getContext ('2d'); če (!! ctx) s = 1.5 * Math.PI, lnk = document.querySelector ('link [rel = "ikona"]'); ctx.lineWidth = 2; ctx.strokeStyle = 'fuksija'; var xhr = novo XMLHttpRequest (); xhr.addEventListener ('napredek', updateLoader); xhr.open ('GET', 'https://xyz.com/abc'); xhr.send (); ; funkcija updateLoader (evt) ctx.clearRect (0, 0, 16, 16); ctx.beginPath (); ctx.arc (8, 8, 6, s, (evt.loaded * 2 * Math.PI / evt.total + s)); ctx.stroke (); lnk.href = cv.toDataURL ('image / png');
V lok()
metodo nadomestiti odstotno vrednost [pct
] z naložen
nepremičnine dogodka-označuje, koliko je bila datoteka naložena in namesto 100
uporabi skupaj
ProgressEvent, ki označuje skupni znesek, ki ga je treba naložiti.
Obstaja ni potrebe setInterval ()
v takih primerih, kot je. \ t napredek ()
dogodka samodejno sproži pri nalaganju.