Fortsett med fra den forrige opplæringen, la oss legge til noe blomstre til vår bygg.
Vi kommer til å dykke inn i CSS3 Animasjoner og lage en enkel spinning animasjon for vårt lastingsikon. Vi har allerede merket vi trenger på siden, så la oss gå rett inn i CSS.
div.loading color: darken ($ grå, 20%); posisjon: absolutt; bredde: 100px; bunn: 15px; venstre: 50%; margin-venstre: -50px; img vertikaljustering: midt; & .rotate -webkit-animasjon-navn: roter; -ms-animasjon-navn: roter; animasjonsnavn: roter; -webkit-animasjon-varighet: 1s; animasjon-varighet: 1s; -webkit-animasjon-iterasjon-telling: uendelig; -ms-animasjon-iterasjon-telling: uendelig; animasjon-iterasjon-telling: uendelig; -webkit-animasjon-timing-funksjon: lineær; -ms-animasjon-timing-funksjon: lineær; animasjon-timing-funksjon: lineær;
Legg denne koden rett etter portefølje-element
blokkere i vår Sass-fil. Til å begynne med, her er det bare å sette opp noen stiler for laste div selv. Vi posisjonerer det absolutt og sørger for at det er sentrert ved å bruke en margin-left
av -50 piksler, som er halvparten av elementets bredde. Dette er for å gjøre opp for at CSS stiller elementer fra øverste venstre hjørne.
Den neste delen er mye mer interessant. Som du kanskje har sett i HTML-koden, tildelte vi en klasse av rotere
til lastingen tag som vi vil bruke som kroken til å utføre en CSS animasjon. Stilene her er satt opp for vår animasjon.
Vi forteller i utgangspunktet CSS hva animasjonsfunksjonen vår kalles (vi vil opprette det i et øyeblikk), hvor lenge animasjonen skal løpe, hvor mange ganger den skal løpe, og timing eller easing-funksjonen skal brukes. For vårt prosjekt ønsker vi en fin glatt 360 graders rotasjon som aldri stopper. Koden ovenfor vil oppnå akkurat det.
Merk: Vi må inkludere forhåndsdefinerte deklarasjoner i nettleseren, slik at ingen savner det - og vi kan forbedre dette ved å bruke en Sass mixin for å gjøre den tunge løftingen for oss.
La oss ta en titt i nettleseren.
OK, det ser veldig bra ut, men det mangler en ting. Det er ikke animerende! La oss fikse det nå med følgende kode:
@ -webkit-keyframes roterer 100% -webkit-transformer: roter (360deg); transformer: roter (360deg); -webkit-transform-opprinnelse: sentrumsenter; transformasjons-opprinnelse: sentrumsenter; @keyframes rotere 100% -webkit-transformer: roter (360deg); -ms-transformer: roter (360deg); transformer: roter (360deg); -webkit-transform-opprinnelse: sentrumsenter; -ms-transform-opprinnelse: sentrumsenter; transformasjons-opprinnelse: sentrumsenter;
Så her er det rotere
funksjon. Måten dette virker på, er å sette viktige punkter i animasjonen for å endre elementet. Du kan sette noe til å skje på 0%, 25%, 50% og så videre. Vår animasjon er veldig enkel, så vi trenger bare en deklarasjon på 100% som sier at elementet må roteres 360 grader. Dette betyr at vårt element vil utføre en hel spinn og ende opp igjen der den startet. Vår tidligere oppsett sørger for at den vil fortsette på ubestemt tid. De forvandle-opprinnelse
eiendom forteller CSS der midtpunktet for animasjonen er. Vi kunne sette det til å snurre med øverste venstre hjørne som sentrum (det kan se interessant!), Men vi vil bare bruke det eksakte senteret av elementet vårt her. Lagre denne filen og ta en titt i nettleseren!
Det skal se ut som det ovenfor, men mye jevnere og raskere.
Det bryter opp vår tidslinjeporteføljeside, men det er en ting vi kan legge til i denne veiledningen.
Nå, i den virkelige verden, vil denne typen layout / tema trolig inneholde en slags uendelig rullefunksjon der flere elementer vises når du ruller nedover siden, slik at du ikke må klikke for å gå gjennom sider.
Vi kan simulere Denne oppførselen her med noen få linjer av jQuery. Åpne opp app.js og begynn med å legge til følgende, over hvor vi skrev vår meny tittel click handler.
var visibleHeight = $ (dokument) .height () - $ (vindu) .height (); var elementer;
Først av alt må vi erklære to variabler som vi kan bruke senere. Den andre er bare en erklæring og vil bli tildelt en verdi senere. Den første, visibleHeight
, tar tak i vindu
høyde og trekker det fra det totale dokument
høyde. Dette vil forlade oss med høyden på området som nå er synlig i brukerens nettleser.
storeElements (); $ (vindu) .on ('resize', funksjon (e) updateHeight ();); $ (vindu) .on ('scroll', funksjon (e) loadContent (););
Neste opp legger du til det overliggende kapittelet. Du vil se noen funksjonsanrop til funksjoner som ikke eksisterer ennå, noe som er OK da vi vil lage dem neste.
funksjonsbutikkElement () items = $ ('.portefølje-element: lt (3)'). klone (); // Strip første klasse fra utvalg items.removeClass ('first');
De storeElements
funksjonen fungerer som en måte å fylle våre elementer
variabel med noen DOM elementer. I vårt tilfelle ønsker vi å ta de første tre porteføljeposter
. Bruken av jQuery's lt ()
lar oss selektivt velge elementene vi ønsker. Når vi har valget vi burde klone ()
dem, så vi bruker ikke de faktiske elementene, men en kopi i stedet. Det siste trinnet er å fjerne først
klasse hvis den eksisterer, da ingen av våre nye elementer er de første i listen.
funksjon updateHeight () visibleHeight = $ (dokument) .height () - $ (vindu) .height ();
Plasser denne funksjonen over storeElements
. Dette er trolig den enkleste funksjonen, da det bare gjør det vi gjorde på dokument klar
. Grunnen til at jeg har brukt en funksjon for å gjøre dette, er å holde den gjenbrukbar.
Nå kommer vi til funksjonen som gjør jobben ...
funksjon loadContent () if ($ (window) .scrollTop ()> = visibleHeight) $ (window) .unbind ('scroll'); var loadingWrap = $ ('.load-wrap'); loadingWrap.fadeIn (funksjon () setTimeout (funksjon () loadingWrap.before (elementer); loadingWrap.hide (funksjon () updateHeight (); storeElements (); $ (window) .on ('scroll' ) loadContent (););;, 500););
OK, trinnvis for hva vi gjør her:
visibleHeight
.vindu
slik at vi kan behandle innholdet.lasting-wrap
for senere bruk.lasting-wrap
inn og når fade fullfører ... Pause
å simulere "lasting" innholdet.elementer
før lasting-wrap
. Dette slår pent inn mellom lastikonet og strømmen porteføljeposter
.lasting-wrap
og en gang skjult updateHeight
, storeElements
og re-feste rullehendelsen til vindu
med instruksjoner for å kjøre denne funksjonen igjen.Puh! Det virker som mye, så kjør gjennom det igjen hvis du trenger det. En ting du kanskje merker, hvis du er ildled-eyed, er at vi fading i lasting-wrap
som faktisk allerede er synlig i vår HTML. Løs det ved å legge til en inline-stil for det elementet ...
Så, hvis vi nå lagrer våre filer og ser arbeidet vårt i nettleseren, bør du se noe mer innhold "last" når du ruller til bunnen av siden. Oh vent, det er en annen ting vi trenger å legge til ...
$ ('menyer h3'). på ('klikk', funksjon (e) $ (dette) .next ('ul'). toggleClass ('open'); updateHeight (); e.preventDefault falsk; );Inne i
h3
klikkbehandler vi opprettet rett ved starten må vi legge til i en samtale tilupdateHeight ()
, På denne måten når vi klikker for å åpne en meny, oppdateres variablene for å gjenspeile endringen i høyden av dokumentet. Uten dette, hvis du åpner en meny på mobil, vil "loading" funksjonaliteten bli brutt somvisibleHeight
variabel ville være feil.Konklusjon
Vi har nådd slutten! Vi kunne nok rydde opp JavaScript som vi nettopp har skrevet, og i en ekte verdenssituasjon ville det trolig bli endret til et AJAX-anrop eller noe.
Jeg håper du har lært noen forskjellige teknikker som følger med denne opplæringen. Det var morsomt å bygge, og jeg er glad for å dele med deg prosessen for å bringe dette flotte designet til liv. Jeg er sikker på at det er mange måter å forbedre dette på, så hvis du har noen forslag, vennligst gi meg beskjed i kommentarene!