.collapsing禁用后,Bootstrap 4导航栏崩溃.show类延迟

时间:2018-05-23 19:06:43

标签: jquery html css twitter-bootstrap bootstrap-4

在bootstrap 4崩溃中,我需要禁用.show类之后出现的.collapsing类的延迟。

所以我需要的是在点击.show后立即在.collapse班级上显示toggle课程。

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet"/>

<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="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <div class="collapse navbar-collapse" id="navbarNav">
    <ul class="navbar-nav">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Features</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Pricing</a>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled" href="#">Disabled</a>
      </li>
    </ul>
  </div>
</nav>

1 个答案:

答案 0 :(得分:2)

我认为没有办法阻止.collapsing类应用于.collapse元素,因此总会有延迟。您可以使用jQuery切换导航栏的显示...而不是折叠。

$('[data-toggle=display]').on('click', function() {
    var target = $($(this).data("target"));
    target.toggleClass("d-none d-block");
}) 

https://www.codeply.com/go/nFbagrqHWa

修改

以下是折叠组件的工作原理......

  • .collapse隐藏了内容

  • 转换开始时
  • .collapsing 已应用show.bs.collapse事件被触发)

  • .collapsing已被删除,并且在转换结束时(.collapse.show事件被触发)会应用shown.bs.collapse

当再次触发元素并触发hide.bs.collapsehidden.bs.collapse事件时,会发生相反的情况。

应用show.bs.collapse类时会触发.collapsing事件。您可以为show.bs.collapse事件添加处理程序,以便在应用.show类时添加.collapsing。但是, 会影响过渡动画,但仍会有延迟。

在应用.show时添加.collapsing

$('.navbar-collapse').on('show.bs.collapse', function () {
  $(this).addClass("show");
});

并且,可选择在“隐藏”事件中删除它。

$('.navbar-collapse').on('show.bs.collapse', function () {
  $(this).addClass("show");
}).on('hide.bs.collapse', function () {
  $(this).removeClass("show");
}).

https://www.codeply.com/go/YBXzYG8fgy

或者,用CSS覆盖转换:

#navbarNav {transition: none;}

https://www.codeply.com/go/zCAqhDVnDW