In de tutorial van vandaag leren we hoe we een show- / hide-component kunnen bouwen met CSS en een beetje JavaScript. Standaard biedt jQuery de slideToggle
methode waarmee we accordeons kunnen maken met een glijdende beweging. Onze uitdaging is om deze functionaliteit na te bootsen met pure JavaScript.
Dit is het component dat we gaan maken:
Notitie: dit is de functionaliteit die wordt geboden door de
en
elementen, hoewel deze nog niet genieten van ondersteuning in Microsoft-browsers.
Om te beginnen definiëren we een element met de klasse van houder
welke twee sub-elementen bevat:
Dit is hoe dat eruit ziet:
De CSS is vrij eenvoudig. We moeten twee helperklassen definiëren (d.w.z.. verbergen
en laten zien
).
Om het doelelement te verbergen en te onthullen, gebruiken we het hoogte
property, maar we zullen de waarden ervan niet specificeren in CSS. In plaats daarvan stellen we de hoogtewaarden dynamisch in via JavaScript.
Een ding om op te merken is dat we geen gebruik maken van de tonen
eigendom voor het schakelen tussen de zichtbaarheid van onze inhoud. Die eigenschap telt niet mee onder de animeerbare CSS-eigenschappen.
Dit zijn de bijbehorende CSS-stijlen:
.verbergen display: none; . laat display: flex; .info overloop: verborgen; overgang: hoogte .5s;
Nu is het tijd om te bespreken hoe onze JavaScript-code zou moeten werken.
Ten eerste, zodra de DOM klaar is, krijgen we de hoogte van de .info
element en stel onmiddellijk de waarde in op 0.
const info = document.querySelector (". info"); laat infoHeight = info.offsetHeight; info.style.height = 0;
Houd er rekening mee dat afhankelijk van uw inhoud (bijvoorbeeld als deze afbeeldingen bevat) de bovenstaande code mogelijk moet worden ingesloten in de laden
evenement.
Vervolgens, wanneer de .schakelen-btn
knop is aangeklikt, doen we het volgende:
.minder
en .meer
elementen..info
element. Als het 0 is (aanvankelijk geven we het deze waarde), betekent dit dat de inhoud verborgen is. We onthullen het door de hoogte in te stellen die gelijk is aan de oorspronkelijke hoogte (opgeslagen in de infoHeight
variabel). Aan de andere kant als de inhoud zichtbaar is, verbergen we deze door de hoogte in te stellen op 0..schakelen-btn
wordt slechts één keer geklikt totdat de dia-animatie is voltooid (deze duurt 500 ms). Hier is de code die al dat gedrag implementeert:
const toggleBtn = document.querySelector (". toggle-btn"); const info = document.querySelector (". info"); const minder = document.querySelector (". less"); const more = document.querySelector (". more"); // initiële hoogte laat infoHeight = info.offsetHeight; toggleBtn.addEventListener ("klik", functie () this.disabled = true; more.classList.toggle ("show"); more.classList.toggle ("hide"); less.classList.toggle ("show") ; less.classList.toggle ("hide"); const infoNewHeight = info.offsetHeight; if (infoNewHeight == 0) info.style.height = '$ infoHeight px'; else info.style.height = 0; setTimeout (() => this.disabled = false;, 500););
De volgende stap is om ervoor te zorgen dat het onderdeel correct zal werken naarmate het formaat van het browservenster verandert.
Hier is de benodigde JS-code:
// variabele definities hier window.addEventListener ("resize", () => info.style.removeProperty ("height"); infoHeight = info.offsetHeight; if (more.classList.contains ("hide")) info .style.height = '$ infoHeight px'; else info.style.height = 0;);
Onze demo zou goed moeten werken in alle recente browsers en apparaten. Ook gebruiken we zoals gebruikelijk Babel om de ES6-code te compileren tot ES5.
In deze korte tutorial hebben we een show / hide-component in accordeonstijl gebouwd met CSS en JavaScript. Dank aan de animatable hoogte
property hebben we een slide-in / slide-out effect toegevoegd aan onze component.
We hebben met name de toegankelijkheid niet overwogen, dus als u de functionaliteit wilt verbeteren, kan dit zeker de volgende stap zijn.