2017-10-12 83 views
0

我想要下拉打开悬停,只有当窗口大于767px。我试图在页面加载和窗口大小条件下调用一个函数。 enableHover()函数仅适用于页面加载,而不适用于窗口大小调整。下拉悬停启用/禁用窗口调整大小

codepen

<nav class="navbar navbar-expand-lg navbar-light bg-light"> 
    <a class="navbar-brand" href="#">navbar</a> 
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> 
    <span class="navbar-toggler-icon"></span> 
    </button> 
    <div class="collapse navbar-collapse" id="navbarNavDropdown"> 
    <ul class="navbar-nav"> 
     <li class="nav-item"> 
     <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a> 
     </li> 
     <li class="nav-item"> 
     <a class="nav-link" href="#">link</a> 
     </li> 
     <li class="nav-item"> 
     <a class="nav-link" href="#">link</a> 
     </li> 
     <li class="nav-item dropdown"> 
     <a class="nav-link dropdown-toggle" href="http://example.com" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 
      Dropdown 
     </a> 
     <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink"> 
      <a class="dropdown-item" href="#">dropdown link</a> 
      <a class="dropdown-item" href="#">dropdown link</a> 
      <a class="dropdown-item" href="#">dropdown link</a> 
     </div> 
     </li> 
    </ul> 
    </div> 
</nav> 
jQuery(document).ready(function($) { 
    //call dropdown hover and on load & resize 
    $(window).resize(function() { 
     enableHover(); 
    }); 
    enableHover(); 
}); 

//emable hover when window > 767px 
function enableHover() { 
    if ($(window).width() > 767) { 
     $('nav.navbar li.dropdown').hover(function() { 
     $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn(500); 
     }, function() { 
     $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut(500); 
     }); 
     } 
    } 

回答

1

您需要取消绑定悬停动作。您的.resize函数正在工作,但没有任何操作从下拉列表中移除悬停操作。添加类似:

function enableHover() { 
    if ($(window).width() > 767) { 
     $('nav.navbar li.dropdown').hover(function() { 
       $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn(500); 
      }, function() { 
       $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut(500); 
     }); 
    } else { 
     $('nav.navbar li.dropdown').unbind('mouseenter mouseleave') 
    } 
} 

这里是一个工作codepen:

https://codepen.io/egerrard/pen/qPyYwR

或更容易的解决办法是只使用CSS:

@media (min-width: 768px) { 
.dropdown:hover .dropdown-menu { 
    display: block; 
    margin-top: 0; 
} 
} 
@media (max-width: 767px) { 
.dropdown:hover .dropdown-menu 
    display: none; 
    margin-top: auto; 
} 

看到它在行动这里:

https://codepen.io/egerrard/pen/OxwwKm

+0

搞乱了你的编码后,它似乎只能工作的一部分时间。其他时候,它不会在点击时打开,也不会在悬停时打开。不知道这是否是一个强大的解决方案。 – gabe1331

+0

@ gabe1331你是对的,用另一个解决方案更新答案。 –

+0

工程太棒了!谢谢 – gabe1331