În tutorialul de astăzi vom învăța cum să construim o componentă de afișare / ascundere cu CSS și un pic de JavaScript. Implicit, jQuery furnizează slideToggle
care ne permite să creăm acordeoane cu o mișcare de alunecare. Provocarea noastră este să imităm această funcționalitate cu JavaScript pur.
Iată componenta pe care o vom crea:
Notă: aceasta este o funcționalitate nativă furnizată de
și
elemente, deși acestea nu beneficiază încă de suport în browserele Microsoft.
Pentru început, definim un element cu clasa lui recipient
care conține două subelemente:
Iata cum arata:
CSS este destul de simplă. Trebuie să definim două clase de ajutor (adică. ascunde
și spectacol
).
Pentru a ascunde și a dezvălui elementul țintă, vom folosi înălţime
proprietate, dar nu vom specifica valorile în CSS. În schimb, vom seta dinamic valorile înălțime prin JavaScript.
Un lucru de observat este că nu folosim afişa
proprietate pentru a comuta vizibilitatea conținutului nostru. Această proprietate nu se numără printre proprietățile CSS animabile.
Iată stilurile CSS corespunzătoare:
.ascundeți display: none; . afișați display: flex; .info overflow: hidden; tranziție: înălțime .5s;
Acum este momentul să discutăm cum ar trebui să funcționeze codul nostru JavaScript.
În primul rând, de îndată ce DOM este gata, obținem înălțimea .info
element și apoi setați imediat valoarea lui la 0.
const info = document.querySelector (". info"); hai infoHeight = info.offsetHeight; info.style.height = 0;
Rețineți că, în funcție de conținutul dvs. (de exemplu, dacă include imagini), este posibil să trebuiască să includeți codul de mai sus în interiorul sarcină
eveniment.
Apoi, atunci când .toggle-BTN
este făcută clic pe butonul de mai jos:
.Mai puțin
și .Mai Mult
element..info
element. Dacă este 0 (inițial îi dăm această valoare), înseamnă că conținutul este ascuns, așa că îl dezvăluim prin stabilirea înălțimii sale egale cu înălțimea inițială (stocată în infoHeight
variabil). Pe de altă parte, dacă conținutul este vizibil, îl ascundem prin setarea înălțimii lui la 0..toggle-BTN
va fi făcută o singură apăsare până când animația de diapozitive se va termina (durează 500 ms). Iată codul care implementează întregul comportament:
const (toggle-btn); const info = document.querySelector (". info"); const mai mic = document.querySelector (". less"); const mai mult = document.querySelector ("mai mult"); // înălțimea inițială permite infoHeight = info.offsetHeight; toggleBtn.addEventListener ("click", functie () this.disabled = true; more.classList.toggle ("show"); more.classList.toggle ("ascunde"); (infoNewHeight == 0) info.style.height = '$ infoHeight px'; altceva info.style.height = info.style.height = 0; setTimeout (() => this.disabled = false;, 500););
Următorul pas este să vă asigurați că componenta va funcționa corect deoarece fereastra browserului va fi redimensionată.
Iată codul JS necesar:
// definiții variabile aici window.addEventListener ("resize", () => info.style.removeProperty ("height"); infoHeight = info.offsetHeight; if (more.classList.contains ("hide" .style.height = '$ infoHeight px'; altceva info.style.height = 0;);
Demo-ul nostru ar trebui să funcționeze bine în toate browserele și dispozitivele recente. De asemenea, ca de obicei, folosim Babel pentru a compila codul ES6 până la ES5.
În acest scurt tutorial am construit o componentă de prezentare / ascundere în stil acordeon cu CSS și JavaScript. Mulțumită animației înălţime
, am reușit să adăugăm un element slide-in / slide-out componentei noastre.
În mod special, nu am luat în considerare accesibilitatea, deci dacă doriți să vă îmbunătățiți funcționalitatea, cu siguranță ar putea fi următorul pas.