【问题标题】:Dropdown hover enable/disable on window resize下拉悬停启用/禁用窗口调整大小
【发布时间】:2018-03-24 15:09:56
【问题描述】:

我希望下拉菜单在悬停时打开,前提是窗口大于 767 像素。我正在尝试使用宽度大小条件在页面加载和窗口调整大小时调用函数。 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);
         });
       }
    }

【问题讨论】:

    标签: javascript jquery twitter-bootstrap


    【解决方案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

    【讨论】:

    • 在弄乱了您的密码后,它似乎只在部分时间起作用。其他时候,它不会在点击时打开,或者它会在悬停时打开。不确定这是否是一个可靠的解决方案。
    • @gabe1331 你是正确的,用另一个解决方案更新了答案。
    猜你喜欢
    • 2023-01-21
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 2012-05-23
    • 2014-11-23
    • 1970-01-01
    相关资源
    最近更新 更多