במדריך זה תלמד כיצד ליצור תפריט נפתח פשוט עם Javascript וניל, HTML ו- CSS. נעבור בקוד ה- HTML, CSS ו- Javascript, אך נשקיע תשומת לב רבה יותר לתכנות, מכיוון שמדובר בהדרכה של JS. נשתמש ב- JS ו- CSS פשוטים, ללא מסגרות או מעבדים מקדימים. היוצא מן הכלל היחיד (סוג) הוא ייבוא קובץ ה- CSS של Font Awesome מכיוון שנשתמש באחד מהסמלים שלו.
זה מיועד למפתחים שיש להם הבנה ממוצעת של HTML, CSS ו- JS. ניסיתי לעשות את זה נקי ככל האפשר, אבל לא אתמקד יותר מדי בפרטים כאן. אני מקווה שכולכם נהנים.
צילומי מסך
כך נראית תוצאת הקוד:
מסך ראשוני:

התפריט הנפתח נפתח:

נפתח עם אפשרות שנבחרה:

HTML:
בחלק זה נדון ביישום קוד ה- HTML לדף ההדגמה. כדי להתחיל, בואו נראה את הקוד
Dropdown Example
זהו בעצם boilerplate עם ראש HTML, למעט link
התגים הטוענים את שני גליונות הסגנון CSS בהם נשתמש במדריך זה: סגנונות Font Awesome styles.css
והקובץ, שם נגדיר את סגנונות העמוד הזה.
ואז, יש את שאר קובץ ה- HTML, הגוף:
Select an option Option 1 Option 2 Option 3 Option 4 The result is: ...
ניתן לחלק את החלק הזה לשלושה חלקים עיקריים:
- ה-
.dropdown
div, בו יוגדר מבנה האלמנט הנפתח. #result
האלמנט, שיכיל את האפשרות שנבחרה על ידי המשתמש, מהרכיב הנפתח.- התסריט שנכתב
בתג. יישומו מוסתר כאן מכיוון שפרטיו יוסברו בחלק האחרון של הדרכה זו.
האלמנט הנפתח הוא div
המכיל title
ואת menu
אלמנטים. הראשון רק מגדיר איזה טקסט יוצג על האלמנט לפני שנבחר אפשרות כלשהי והאחרון יגדיר את האפשרויות שניתן לבחור על ידי האלמנט.
result
האלמנט הוא שם רק כדי להראות לך מה האפשרות שנבחרה.
סגנונות:
למטה תוכל לבדוק את קוד ה- CSS המלא. כפי שאתה יכול לראות אותו עושה שימוש CSS3 transition
ו- transform
מבנים.
אנא שימו לב .dropdown
להגדרות הכיתות. אלה משמשים להגדרת הפריסה של רכיב המיכל הנפתח, כמו גם את האלמנטים הפנימיים שלו, כגון ה- .title
שלו .option
ושלו.
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:
כעת נראה כיצד מיושם החלק של Javascript. תחילה נעבור על הגדרות הפונקציות ואז על הקוד שקורא לפונקציות אלה בכדי לגרום לפעולות הנפתחות לקרות.
ביסודו של דבר, ישנן 3 פעולות המתרחשות בהתאם לאינטראקציית המשתמש, שכן המאזינים שלהם מתווספים לרכיבי DOM:
- לחיצה על אלמנט הנפתח
- בחירה באחת מאפשרויות הנפתח
- שינוי האפשרות שנבחרה כעת
ברצוני להבהיר כי אנו משתמשים בפונקציות חץ ( () => {}
) const
ובמילת המפתח, שהם תכונות ES6. אתה כנראה טוב אם אתה משתמש בגרסה עדכנית של הדפדפן שלך, אך זכור זאת.
1. לחיצה על אלמנט הנפתח
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'); }
כאשר לוחצים על אלמנט הנפתח, הוא נפתח (אם הוא סגור) או נסגר (אם הוא נפתח). זה קורה על ידי כריכה toggleMenuDisplay
למאזין אירוע הקליק ברכיב הנפתח. פונקציה זו מחליפה את תצוגת menu
האלמנט שלה באמצעות הפונקציות toggleDisplay
ו- toggleClass
.
2. בחירת אחת מאפשרויות הנפתח
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. שינוי האפשרות שנבחרה כעת
function handleTitleChange(e){ const result = document.getElementById('result'); result.innerHTML = 'The result is: ' + e.target.textContent; }
הפונקציה handleTitleChange
קשורה change
לאירוע המותאם אישית על .title
האלמנט, כדי לשנות את #result
תוכן האלמנט בכל פעם שרכיב הכותרת משתנה. הפעלת אירוע זה נעשית בסעיף הקודם.
קוד ראשי
//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);
בחלק הראשי יש רק קוד פשוט כדי לקבל את הכותרת של התפריט הנפתח ואלמנטים האפשרויות כדי לקשור אליהם את האירועים שנדונו בחלק האחרון.
הַדגָמָה
הקוד וההדגמה המלאים של יישום זה נמצאים כאן.
עוד מידע
- מבוא ל- ES6
- פונקציות חץ
- תן וקונסט