Kuinka luoda avattava valikko CSS: llä ja JavaScriptillä
Tässä opetusohjelmassa opit luomaan yksinkertaisen avattavan valikon vanilja Javascriptilla, HTML: llä ja CSS: llä. Käymme läpi HTML-, CSS- ja Javascript-koodin, mutta kiinnitämme enemmän huomiota ohjelmointiin, koska tämä on JS-opetusohjelma. Käytämme yksinkertaista JS: ää ja CSS: ää ilman kehyksiä tai esiprosessoreita. Ainoa (eräänlainen) poikkeus on Font Awesome CSS -tiedoston tuominen, koska käytämme yhtä sen kuvakkeista.
Tämä on suunnattu kehittäjille, jotka ymmärtävät keskimäärin HTML: n, CSS: n ja JS: n. Yritin tehdä siitä mahdollisimman puhtaan, mutta en keskity liikaa yksityiskohtiin täällä. Toivottavasti nautitte kaikista.
Kuvakaappaukset
Näin kooditulos näyttää:
Aloitusnäyttö:

Avattava valikko avattu:

Avattava valikko:

HTML:
Tässä osiossa käsitellään demosivun HTML-koodin käyttöönottoa. Aloitetaan katsotaan koodi
Dropdown Example
Tämä on pohjimmiltaan HTML-pääkattilakivi, lukuun ottamatta link
tunnisteita, jotka lataavat kaksi tässä opetusohjelmassa käytettävää CSS-tyylitaulukkoa: Font Awesome -tyylit ja styles.css
tiedosto, jossa määritämme tämän sivun tyylit.
Sitten on jäljellä oleva HTML-tiedosto, runko:
Select an option Option 1 Option 2 Option 3 Option 4 The result is: ...
Tämä osa voidaan jakaa kolmeen pääosaan:
.dropdown
Div, jossa avattavan elementin rakenne määritellään.#result
Elementti, joka sisältää valitun vaihtoehdon mukaan käyttäjä, avattavasta elementti.- Tunnisteeseen kirjoitettu komentosarja
. Sen toteutus on piilotettu tähän, koska sen yksityiskohdat selitetään tämän opetusohjelman viimeisessä osassa.
Avattavasta elementistä div
koostuu a title
ja menu
elementit. Ensin mainittu vain määrittää, mikä teksti näytetään elementissä ennen minkä tahansa vaihtoehdon valintaa, ja jälkimmäinen määrittää vaihtoehdot, jotka elementti voi valita.
result
Elementti on siellä vain näyttää mitä vaihtoehto on valittuna.
Tyylit:
Alla voit tarkistaa koko css-koodin. Kuten näette, se käyttää CSS3: ta transition
ja transform
rakenteita.
Kiinnitä huomiota .dropdown
luokkien määritelmiin. Niitä käytetään määrittämään asettelun avattavan säiliön komponentti sekä sen sisä- osia, kuten .title
ja sen .option
n.
body{ font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif; } .hide { max-height: 0 !important; } .dropdown{ border: 0.1em solid black; width: 10em; margin-bottom: 1em; } .dropdown .title{ margin: .3em .3em .3em .3em; width: 100%; } .dropdown .title .fa-angle-right{ float: right; margin-right: .7em; transition: transform .3s; } .dropdown .menu{ transition: max-height .5s ease-out; max-height: 20em; overflow: hidden; } .dropdown .menu .option{ margin: .3em .3em .3em .3em; margin-top: 0.3em; } .dropdown .menu .option:hover{ background: rgba(0,0,0,0.2); } .pointerCursor:hover{ cursor: pointer; } .rotate-90{ transform: rotate(90deg); }
JavaScript:
Nyt näemme, kuinka Javascript-osa toteutetaan. Käymme ensin läpi funktion määritelmät ja sitten koodin, joka kutsuu nämä toiminnot tekemään pudotusvalinnat.
Periaatteessa on 3 toimintoa, jotka tapahtuvat käyttäjän vuorovaikutuksen mukaan, koska heidän kuuntelijansa lisätään DOM-elementteihin:
- Napsauttamalla avattavaa elementtiä
- Valitse yksi avattavista vaihtoehdoista
- Valitun vaihtoehdon muuttaminen
Haluaisin tehdä selväksi, että käytämme nuolitoimintoja ( () => {}
) ja const
avainsanaa, jotka ovat ES6-ominaisuuksia. Olet todennäköisesti hyvä, jos käytät selaimesi uusinta versiota, mutta pidä tämä mielessä.
1. Napsauttamalla pudotusvalikkoa
function toggleClass(elem,className){ if (elem.className.indexOf(className) !== -1){ elem.className = elem.className.replace(className,''); } else{ elem.className = elem.className.replace(/\s+/g,' ') + ' ' + className; } return elem; } function toggleDisplay(elem){ const curDisplayStyle = elem.style.display; if (curDisplayStyle === 'none' || curDisplayStyle === ''){ elem.style.display = 'block'; } else{ elem.style.display = 'none'; } } function toggleMenuDisplay(e){ const dropdown = e.currentTarget.parentNode; const menu = dropdown.querySelector('.menu'); const icon = dropdown.querySelector('.fa-angle-right'); toggleClass(menu,'hide'); toggleClass(icon,'rotate-90'); }
Kun avattavaa elementtiä napsautetaan, se avautuu (jos se on suljettu) tai sulkeutuu (jos se avataan). Tämä tapahtuu sitomalla toggleMenuDisplay
avattavan elementin napsautustapahtumien kuuntelija. Tämä toiminto vaihtaa menu
elementin näyttöä toggleDisplay
ja toggleClass
-toimintojen avulla.
2. Valitse yksi avattavista vaihtoehdoista
function handleOptionSelected(e){ toggleClass(e.target.parentNode, 'hide'); const id = e.target.id; const newValue = e.target.textContent + ' '; const titleElem = document.querySelector('.dropdown .title'); const icon = document.querySelector('.dropdown .title .fa'); titleElem.textContent = newValue; titleElem.appendChild(icon); //trigger custom event document.querySelector('.dropdown .title').dispatchEvent(new Event('change')); //setTimeout is used so transition is properly shown setTimeout(() => toggleClass(icon,'rotate-90',0)); }
3. Valitun vaihtoehdon muuttaminen
function handleTitleChange(e){ const result = document.getElementById('result'); result.innerHTML = 'The result is: ' + e.target.textContent; }
Funktio handleTitleChange
on sidottu elementin mukautettuun change
tapahtumaan .title
, jotta #result
elementin sisältö voidaan muuttaa aina, kun otsikkoelementti muuttuu. Tämä tapahtuma käynnistetään edellisessä osassa.
Pääkoodi
//get elements const dropdownTitle = document.querySelector('.dropdown .title'); const dropdownOptions = document.querySelectorAll('.dropdown .option'); //bind listeners to these elements dropdownTitle.addEventListener('click', toggleMenuDisplay); dropdownOptions.forEach(option => option.addEventListener('click',handleOptionSelected)); document.querySelector('.dropdown .title').addEventListener('change',handleTitleChange);
Pääosassa on vain yksinkertainen koodi, jolla avattavan valikon otsikko ja vaihtoehtoelementit voidaan sitoa niihin viimeisessä osiossa käsiteltyjen tapahtumien kanssa.
Demo
Tämän sovelluksen koko koodi ja esittely löytyy täältä.
Lisää tietoa
- ES6-esittely
- Nuolitoiminnot
- Let ja Const