Javascript 30 - Gün 2622 Mayıs 2023Projenin demosu : Demo Başlangıç dosyalarını bulabileceğiniz repom: js-30 | github Amaç Javascript ile 22. günde geliştirdiğimize benzer bir mantıkla çalışan açılır bir menü yapacağız. Çözüm <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Follow Along Nav</title> <link rel="icon" href="https://fav.farm/✅" /> </head> <body> <h2>Cool</h2> <nav class="top"> <!-- beyaz arka plana sahip olan divimiz bu --> <div class="dropdownBackground"> <span class="arrow"></span> </div> <ul class="cool"> <!-- li elementlerinin üzerine gelindiğinde dropdown sınıfına sahip içerik gösterilmeye başlanacak --> <li> <a href="#">About Me</a> <div class="dropdown dropdown1"> <div class="bio"> <img src="https://logo.clearbit.com/wesbos.com"> <p>Wes Bos sure does love web development. He teaches things like JavaScript, CSS and BBQ. Wait. BBQ isn't part of web development. It should be though!</p> </div> </div> </li> <li> <a href="#">Courses</a> <ul class="dropdown courses"> <li> <span class="code">RFB</span> <a href="https://ReactForBeginners.com">React For Beginners</a> </li> <li> <span class="code">ES6</span> <a href="https://ES6.io">ES6 For Everyone</a> </li> <li> <span class="code">NODE</span> <a href="https://LearnNode.com">Learn Node</a> </li> <li> <span class="code">STPU</span> <a href="https://SublimeTextBook.com">Sublime Text Power User</a> </li> <li> <span class="code">WTF</span> <a href="http://Flexbox.io">What The Flexbox?!</a> </li> <li> <span class="code">GRID</span> <a href="https://CSSGrid.io">CSS Grid</a> </li> <li> <span class="code">LRX</span> <a href="http://LearnRedux.com">Learn Redux</a> </li> <li> <span class="code">CLPU</span> <a href="http://CommandLinePowerUser.com">Command Line Power User</a> </li> <li> <span class="code">MMD</span> <a href="http://MasteringMarkdown.com">Mastering Markdown</a> </li> </ul> </li> <li> <a href="#">Other Links</a> <ul class="dropdown dropdown3"> <li><a class="button" href="http://twitter.com/wesbos">Twitter</a></li> <li><a class="button" href="http://facebook.com/wesbos.developer">Facebook</a></li> <li><a class="button" href="http://wesbos.com">Blog</a></li> <li><a class="button" href="http://wesbos.com/courses">Course Catalog</a></li> </ul> </li> </ul> </nav> <style> /* Menünün çalışması için gereken stiller... */ </style> <script> // cool sınıfına sahip elementlerin ilk üyelerini seçelim const triggers = document.querySelectorAll('.cool > li'); const background = document.querySelector('.dropdownBackground') const nav = document.querySelector('.top') // fare ile üzerine gelindiğinde background adlı divimiz uygun yere taşınacak ve görünür hale getirilecektir function handleEnter() { this.classList.add('trigger-enter') setTimeout(() => { if (this.classList.contains('trigger-enter')) { this.classList.add('trigger-enter-active') } }, 150) background.classList.add('open') const dropdown = this.querySelector('.dropdown') const dropdownCoords = dropdown.getBoundingClientRect() const navCoords = nav.getBoundingClientRect() const coords = { height: dropdownCoords.height, width: dropdownCoords.width, top: dropdownCoords.top - navCoords.top, left: dropdownCoords.left - navCoords.left } background.style.setProperty('width', `${coords.width}px`) background.style.setProperty('height', `${coords.height}px`) background.style.setProperty('transform', `translate(${coords.left}px,${coords.top}px)`) } // fare ayrıldığında ise hem açılır menünün içerisindeki içerik hem de beyaz arkaplana sahip element gizlenecektir function handleLeave() { this.classList.remove('trigger-enter', 'trigger-enter-active') background.classList.remove('open') } triggers.forEach(trigger => trigger.addEventListener('mouseenter', handleEnter)) triggers.forEach(trigger => trigger.addEventListener('mouseleave', handleLeave)) </script> </body> </html>GitHubBu sayfayı düzenle