2017-10-12 25 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