javascript - 有没有办法在屏幕调整大小时关闭导航下拉菜单?

标签 javascript jquery html css

我有一个 bootstrap 4 导航栏/下拉菜单,在桌面上它们以 css 动画/淡入打开。在移动设备上我让它们以单独的“切换”按钮打开。一切都按预期工作,但是如果我在移动设备上打开下拉菜单,然后调整窗口屏幕的大小,下拉菜单将保持打开状态,并且不能很好地播放动画。有没有办法在窗口调整大小或到达桌面断点时关闭下拉菜单?

HTML:

<ul class="navbar-nav">
<li class="nav-item dropdown">
    <div class="nav-title-flex-container">
        <a class="nav-link dropdown-toggle" data-toggle="dropdown" href=“home.html"
           id="navbar-drop-downs"
           aria-haspopup="true" aria-expanded="false">
            <span class="underline"> Home</span>
        </a>
        <span class="openNav"><i class="fa fa-angle-right"></i></span>
    </div>

    <div class="dropdown-menu dropdown-menu-nav-bottom"
         aria-labelledby="navbar-drop-downs">
        <a class="dropdown-item" href=“#”>Sub Page</a>
        <a class="dropdown-item" href=“#”>Sub page</a>
    </div>
</li>
<li class="nav-item dropdown">
    <div class="nav-title-flex-container">
    <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="how-to-be-vocal.html"
       id="navbar-drop-downs"
       aria-haspopup="true" aria-expanded="false">
        <span class="underline”>About </span>
    </a>
        <span class="openNav"><i class="fa fa-angle-right"></i></span>
    </div>
    <div class="dropdown-menu dropdown-menu-nav-bottom"
         aria-labelledby="navbar-drop-downs">
        <a class="dropdown-item" href=“#”>Sub Page</a>
    </div>
</li>
</ul>

CSS:

@keyframes fadein {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}


@media (min-width: 1199px) {
  .dropdown:hover > .dropdown-menu {
    display: block;
    z-index: 100;
    position: absolute;
    animation: fadein .7s;
  }
}

jquery:(切换下拉菜单/移动)

  $openNavToggle.on('click', function () {
  $(this).parent().next('.dropdown-menu-nav-bottom').toggleClass('show');
  $(this).find('i').toggleClass('fa-angle-right--active');
});

最佳答案

您可以使用 jQuery 的 resize 事件处理程序。

您还需要确保您正在删除这些类,而不仅仅是切换它们 - 否则导航可能会在调整大小时出现

$openNavToggle.resize(function () {
  $(this).parent().next('.dropdown-menu-nav-bottom').removeClass('show');
  $(this).find('i').removeClass('fa-angle-right--active');
})

此外,您可以使用有点去抖动来确保调整大小功能仅在调整大小结束时生效,如下所示:

let resizeEvent;
$openNavToggle.resize(function () {
  clearTimeout(resizeEvent);
  resizeEvent = setTimeout(() => {
    $(this).parent().next('.dropdown-menu-nav-bottom').removeClass('show');
    $(this).find('i').removeClass('fa-angle-right--active');
  }, 300);
})

关于javascript - 有没有办法在屏幕调整大小时关闭导航下拉菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58916377/

相关文章:

javascript - 从 AWS S3 存储桶上的 html 文件弹出窗口 postMessage()

JavaScript:使用正则表达式在 Char 和 Number 之间添加空格

javascript - 在子元素中禁用 jQuery 可拖动

html - Bootstrap 导航中新行显示的管道分隔符

javascript - Angular 2 绑定(bind)模态的关闭事件

javascript - 在混合 android 应用程序中导航时在 chrome 设备中看到多个分离的 webview 实例

javascript - 如何在按钮点击时显示 iframe

javascript - 如何轻松创建自定义的 Typeahead

javascript - BxSlider 将幻灯片更改为导航链接上的特定幻灯片单击

html - 如何在 Google App Engine 上只提供静态文件?