简体   繁体   English

下拉菜单 Mouseleave 事件应忽略子元素

[英]Dropdown Menu Mouseleave Event Should Ignore Child Elements

I was fooling around and trying to build the same dropdown menu as Google uses on this page: https://developers.google.com/maps/documentation我在鬼混,并试图构建与谷歌在此页面上使用的相同的下拉菜单: https://developers.google.com/maps/documentation

I have an issue where the drop menu closes when the mouse leaves the parent nav element for the dropdown menu.我有一个问题,当鼠标离开下拉菜单的父导航元素时下拉菜单关闭。 What can I do to improve this?我能做些什么来改善这一点? Item 3 in my example contains the dropdown menu.我的示例中的第 3 项包含下拉菜单。 This is just a practice snippet.这只是一个练习片段。 I'm in no rush to complete it.我不急于完成它。

 (function() { const parentNav = document.querySelector('.parent-nav'); const dropdown = document.querySelector('.dropdown'); parentNav.addEventListener('mouseenter', function(e) { menuTransition(); this.classList.add('dropdown-open'); }); parentNav.addEventListener('mouseleave', function(e) { menuTransition(); this.classList.remove('dropdown-open'); }); function menuTransition() { const dropDownContent = document.querySelector('.dropdown-content'); dropDownContent.classList.add('dropdown-transition'); setTimeout(function() { dropDownContent.classList.remove('dropdown-transition'); }, 500); } })();
 #nav { align-items: center; background: #1d0e96; display: flex; height: 60px; position: relative; width: 100%; } #nav ul { align-items: center; display: flex; height: 100%; list-style: none; margin: 0; padding: 0; } #nav li { height: 100%; position: relative; } #nav a { align-items: center; color: #fff; display: flex; height: 100%; padding: 10px 20px; text-decoration: none; } #nav a:hover { background: #10075d; }.dropdown { display: block; left: -169px; overflow: hidden; pointer-events: none; position: absolute; top: 100%; width: 100vw; }.dropdown-content { background: #ddd; display: flex; flex-direction: column; padding: 10px 25px; pointer-events: none; transform: translate3d(0, -100%, 0); transition: transform 0s; }.dropdown-transition { transition: transform.5s; }.dropdown-open.dropdown-content { transform: translate3d(0, 0, 0); }
 <nav id="nav"> <ul> <li><a href="#">Item 1</a></li> <li><a href="#">Item 2</a></li> <li class="parent-nav"> <a href="#">Item 3</a> <div class="dropdown"> <div class="dropdown-content"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sit amet dictum leo. Pellentesque pulvinar consectetur ante ac finibus. Suspendisse dictum orci nec condimentum luctus. Sed semper lectus a quam placerat vestibulum. Vestibulum luctus sem at tincidunt vehicula. Mauris nec sapien aliquam, maximus arcu ac, condimentum diam. Cras mattis dui quis posuere bibendum. Cras venenatis semper purus, nec suscipit nulla placerat in. Fusce tincidunt pretium vulputate. Suspendisse potenti. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris eu libero iaculis, facilisis ex cursus, mollis ipsum. Suspendisse nec libero accumsan, gravida nibh sed, blandit nibh. Suspendisse nec turpis imperdiet, vehicula justo nec, auctor mi.</p> </div> </div> </li> <li><a href="#">Item 4</a></li> <li><a href="#">Item 5</a></li> <li><a href="#">Item 6</a></li> </ul> </nav>

Here's my JSFiddle link: https://jsfiddle.net/fsv75dkh/这是我的 JSFiddle 链接: https://jsfiddle.net/fsv75dkh/

I added pointer-events: all to the .dropdown-content element, then added in the following to the CSS:我将pointer-events: all添加到.dropdown-content元素,然后将以下内容添加到 CSS 中:

.parent-nav:hover .dropdown-content {
   transform: translate3d(0, 0, 0);
}

With that, I no longer need any of the JavaScript.有了这个,我不再需要任何 JavaScript。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM