I dagens veiledning lærer vi hvordan å bygge en show / hide komponent med CSS og en liten bit av JavaScript. Som standard gir jQuery slideToggle
metode som gjør at vi kan lage trekkspill med glidende bevegelse. Vår utfordring er å etterligne denne funksjonaliteten med rent JavaScript.
Her er komponenten vi skal skape:
Merk: Dette er funksjonalitet som er levert av
og
elementer, selv om disse ennå ikke nyter støtte i Microsoft-nettlesere.
Til å begynne med definerer vi et element med klassen av container
som inneholder to delelementer:
Her ser det ut som:
CSS er ganske grei. Vi må definere to hjelperklasser (dvs.. gjemme seg
og vise fram
).
For å skjule og avsløre målelementet bruker vi høyde
eiendom, men vi vil ikke spesifisere sine verdier i CSS. I stedet vil vi dynamisk sette høydeverdiene gjennom JavaScript.
En ting å merke seg er at vi ikke bruker vise
eiendom for å bytte synlighet av innholdet vårt. Den egenskapen teller ikke seg blant de animerte CSS-egenskapene.
Her er de tilsvarende CSS-stilene:
.gjem display: none; .show display: flex; .info overflow: hidden; overgang: høyde .5s;
Nå er det på tide å diskutere hvordan JavaScript-koden skal fungere.
For det første, så snart DOM er klar, får vi høyden på .info
element og sett deretter umiddelbart verdien til 0.
const info = document.querySelector (". info"); la infoHeight = info.offsetHeight; info.style.height = 0;
Husk at avhengig av innholdet ditt (for eksempel hvis det inneholder bilder), må du kanskje legge inn koden ovenfor inne i laste
begivenhet.
Deretter når .veksle-btn
knappen er klikket gjør vi følgende:
.mindre
og .mer
elementer..info
element. Hvis det er 0 (i utgangspunktet gir vi det denne verdien), det betyr at innholdet er skjult, så vi avslører det ved å sette sin høyde tilsvarer den innledende høyden (lagret i infoHeight
variabel). På den annen side, hvis innholdet er synlig, skjuler vi det ved å sette høyden til 0..veksle-btn
vil bli klikket bare en gang til lysbildeanimasjonen fullføres (den varer 500 ms). Her er koden som implementerer all den atferden:
const toggleBtn = document.querySelector (". toggle-btn"); const info = document.querySelector (". info"); const less = document.querySelector (". mindre"); const more = document.querySelector (". mer"); // første høyde la infoHeight = info.offsetHeight; toggleBtn.addEventListener ("klikk", funksjon () this.disabled = true; more.classList.toggle ("show"); more.classList.toggle ("hide"); less.classList.toggle ("show") ; less.classList.toggle ("hide"); const infoNewHeight = info.offsetHeight; hvis (infoNewHeight == 0) info.style.height = '$ infoHeight px'; else info.style.height = 0; setTimeout (() => this.disabled = false;, 500););
Det neste trinnet er å sikre at komponenten vil fungere riktig når nettleservinduet blir endret.
Her er den nødvendige JS-koden:
// variable definisjoner her window.addEventListener ("resize", () => info.style.removeProperty ("height"); infoHeight = info.offsetHeight; if (more.classList.contains ("hide")) .style.height = '$ infoHeight px'; else info.style.height = 0;);
Vår demo skal fungere godt i alle nyere nettlesere og enheter. Også, som vanlig, bruker vi Babel til å kompilere ES6-koden ned til ES5.
I denne korte opplæringen bygget vi en trekkspillstil / skjul komponent med CSS og JavaScript. Takket være den animable høyde
eiendom klarte vi å legge til en lysbilde-inn / uttrekkseffekt til vår komponent.
Spesielt har vi ikke vurdert tilgjengeligheten, så hvis du ønsker å forbedre funksjonaliteten som sikkert kan være det neste trinnet.