jquery - 修复在 Bootstrap 选项卡上无法正常工作的问题

标签 jquery html twitter-bootstrap css

我在 bootstrap 配置文件选项卡上为元素使用了自定义词缀。问题是只有当选项卡在文档加载时处于事件状态时,词缀才能正常工作。否则它不能正常工作。但我希望第一个选项卡应该在加载时处于事件状态。如果我单击第二个选项卡(配置文件),词缀应该可以正常工作。

$(document).ready(function() {
  var offset = $(".pagination").offset();
  var top = offset.top - 42;
  /* alert(top); */

  $(window).scroll(function() {
    if ($(document).scrollTop() > top) {
      $(".pagination").addClass("affix");
    } else {
      $(".pagination").removeClass("affix");
    }
  });
});
.affix {
  position: fixed;
  width: 100%;
  top: 42px;
  z-index: 1;
  background: #fff;
}

body {
  padding-top: 42px;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="https://rawgit.com/bassjobsen/affix/master/assets/js/affix.js"></script>
<nav class="fixed-top" style="background:#fff;">
  <div class="nav nav-tabs" id="nav-tab" role="tablist">
    <a class="nav-item nav-link active" id="nav-home-tab" data-toggle="tab" href="#nav-home" role="tab" aria-controls="nav-home" aria-selected="true">Home</a>
    <a class="nav-item nav-link" id="nav-profile-tab" data-toggle="tab" href="#nav-profile" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</a>
  </div>
</nav>
<div class="tab-content" id="nav-tabContent">
  <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab">
    <p>
      Lorem ipsum dolor sit amet
    </p>
  </div>
  <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab">
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam auctor rutrum felis, non fermentum sem pulvinar in. Duis pulvinar, tellus vel suscipit suscipit, sem tortor tristique nisi, vitae pellentesque sapien dolor ut metus. Curabitur a sodales risus.
      Duis luctus lectus sit amet scelerisque aliquam. Nunc nec lectus congue ex eleifend tempus. Praesent et varius odio, sed egestas sapien. Sed quis molestie justo. Aliquam ut turpis pretium nunc tempor ornare in a est. Mauris tristique tincidunt purus,
      at laoreet quam vehicula a. Nunc vel consequat nunc, eget ullamcorper augue. Nunc lobortis, sapien vitae eleifend bibendum, libero nisl congue justo, non vestibulum lectus libero nec nulla. Suspendisse ac elit pulvinar, pellentesque magna ac, venenatis
      elit. Vivamus eget pellentesque nisl, eu sollicitudin lorem. Fusce convallis orci a blandit commodo. Nulla at luctus tortor.
    </p>
    <nav aria-label="page navigation">
      <ul class="pagination justify-content-center mb-0">
        <li class="page-item disabled">
          <a class="page-link" href="#" tabindex="-1">Previous</a>
        </li>
        <li class="page-item"><a class="page-link" href="#">1</a></li>
        <li class="page-item"><a class="page-link" href="#">2</a></li>
        <li class="page-item"><a class="page-link" href="#">3</a></li>
        <li class="page-item"><a class="page-link" href="#">4</a></li>
        <li class="page-item"><a class="page-link" href="#">5</a></li>
        <li class="page-item"><a class="page-link" href="#">6</a></li>
        <li class="page-item"><a class="page-link" href="#">7</a></li>
        <li class="page-item"><a class="page-link" href="#">8</a></li>
        <li class="page-item"><a class="page-link" href="#">9</a></li>
        <li class="page-item">
          <a class="page-link" href="#">Next</a>
        </li>
      </ul>
    </nav>
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam auctor rutrum felis, non fermentum sem pulvinar in. Duis pulvinar, tellus vel suscipit suscipit, sem tortor tristique nisi, vitae pellentesque sapien dolor ut metus. Curabitur a sodales risus.
      Duis luctus lectus sit amet scelerisque aliquam. Nunc nec lectus congue ex eleifend tempus. Praesent et varius odio, sed egestas sapien. Sed quis molestie justo. Aliquam ut turpis pretium nunc tempor ornare in a est. Mauris tristique tincidunt purus,
      at laoreet quam vehicula a. Nunc vel consequat nunc, eget ullamcorper augue. Nunc lobortis, sapien vitae eleifend bibendum, libero nisl congue justo, non vestibulum lectus libero nec nulla. Suspendisse ac elit pulvinar, pellentesque magna ac, venenatis
      elit. Vivamus eget pellentesque nisl, eu sollicitudin lorem. Fusce convallis orci a blandit commodo. Nulla at luctus tortor.
    </p>
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam auctor rutrum felis, non fermentum sem pulvinar in. Duis pulvinar, tellus vel suscipit suscipit, sem tortor tristique nisi, vitae pellentesque sapien dolor ut metus. Curabitur a sodales risus.
      Duis luctus lectus sit amet scelerisque aliquam. Nunc nec lectus congue ex eleifend tempus. Praesent et varius odio, sed egestas sapien. Sed quis molestie justo. Aliquam ut turpis pretium nunc tempor ornare in a est. Mauris tristique tincidunt purus,
      at laoreet quam vehicula a. Nunc vel consequat nunc, eget ullamcorper augue. Nunc lobortis, sapien vitae eleifend bibendum, libero nisl congue justo, non vestibulum lectus libero nec nulla. Suspendisse ac elit pulvinar, pellentesque magna ac, venenatis
      elit. Vivamus eget pellentesque nisl, eu sollicitudin lorem. Fusce convallis orci a blandit commodo. Nulla at luctus tortor.
    </p>
  </div>
</div>

最佳答案

您需要在选项卡更改事件上更新 offsettop 以获得适当的值。

$(document).ready(function() {
  var offset = $(".pagination").offset();
  var top = offset.top - 42;
  /* alert(top); */

  $(window).scroll(function() {
    if ($(document).scrollTop() > top) {
      $(".pagination").addClass("affix");
    } else {
      $(".pagination").removeClass("affix");
    }
  });

  $('a[data-toggle="tab"]').on('shown.bs.tab', function(e) {
    var target = $(e.target).attr("href") // activated tab  
    offset = $(".pagination").offset();
    top = offset.top - 42;
  });
});
.affix {
  position: fixed;
  width: 100%;
  top: 42px;
  z-index: 1;
  background: #fff;
}

body {
  padding-top: 42px;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="https://rawgit.com/bassjobsen/affix/master/assets/js/affix.js"></script>
<nav class="fixed-top" style="background:#fff;">
  <div class="nav nav-tabs" id="nav-tab" role="tablist">
    <a class="nav-item nav-link active" id="nav-home-tab" data-toggle="tab" href="#nav-home" role="tab" aria-controls="nav-home" aria-selected="true">Home</a>
    <a class="nav-item nav-link" id="nav-profile-tab" data-toggle="tab" href="#nav-profile" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</a>
  </div>
</nav>
<div class="tab-content" id="nav-tabContent">
  <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab">
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam auctor rutrum felis, non fermentum sem pulvinar in. Duis pulvinar, tellus vel suscipit suscipit, sem tortor tristique nisi, vitae pellentesque sapien dolor ut metus. Curabitur a sodales risus.
      Duis luctus lectus sit amet scelerisque aliquam. Nunc nec lectus congue ex eleifend tempus. Praesent et varius odio, sed egestas sapien. Sed quis molestie justo. Aliquam ut turpis pretium nunc tempor ornare in a est. Mauris tristique tincidunt purus,
      at laoreet quam vehicula a. Nunc vel consequat nunc, eget ullamcorper augue. Nunc lobortis, sapien vitae eleifend bibendum, libero nisl congue justo, non vestibulum lectus libero nec nulla. Suspendisse ac elit pulvinar, pellentesque magna ac, venenatis
      elit. Vivamus eget pellentesque nisl, eu sollicitudin lorem. Fusce convallis orci a blandit commodo. Nulla at luctus tortor.
    </p>
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam auctor rutrum felis, non fermentum sem pulvinar in. Duis pulvinar, tellus vel suscipit suscipit, sem tortor tristique nisi, vitae pellentesque sapien dolor ut metus. Curabitur a sodales risus.
      Duis luctus lectus sit amet scelerisque aliquam. Nunc nec lectus congue ex eleifend tempus. Praesent et varius odio, sed egestas sapien. Sed quis molestie justo. Aliquam ut turpis pretium nunc tempor ornare in a est. Mauris tristique tincidunt purus,
      at laoreet quam vehicula a. Nunc vel consequat nunc, eget ullamcorper augue. Nunc lobortis, sapien vitae eleifend bibendum, libero nisl congue justo, non vestibulum lectus libero nec nulla. Suspendisse ac elit pulvinar, pellentesque magna ac, venenatis
      elit. Vivamus eget pellentesque nisl, eu sollicitudin lorem. Fusce convallis orci a blandit commodo. Nulla at luctus tortor.
    </p>
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam auctor rutrum felis, non fermentum sem pulvinar in. Duis pulvinar, tellus vel suscipit suscipit, sem tortor tristique nisi, vitae pellentesque sapien dolor ut metus. Curabitur a sodales risus.
      Duis luctus lectus sit amet scelerisque aliquam. Nunc nec lectus congue ex eleifend tempus. Praesent et varius odio, sed egestas sapien. Sed quis molestie justo. Aliquam ut turpis pretium nunc tempor ornare in a est. Mauris tristique tincidunt purus,
      at laoreet quam vehicula a. Nunc vel consequat nunc, eget ullamcorper augue. Nunc lobortis, sapien vitae eleifend bibendum, libero nisl congue justo, non vestibulum lectus libero nec nulla. Suspendisse ac elit pulvinar, pellentesque magna ac, venenatis
      elit. Vivamus eget pellentesque nisl, eu sollicitudin lorem. Fusce convallis orci a blandit commodo. Nulla at luctus tortor.
    </p>
  </div>
  <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab">
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam auctor rutrum felis, non fermentum sem pulvinar in. Duis pulvinar, tellus vel suscipit suscipit, sem tortor tristique nisi, vitae pellentesque sapien dolor ut metus. Curabitur a sodales risus.
      Duis luctus lectus sit amet scelerisque aliquam. Nunc nec lectus congue ex eleifend tempus. Praesent et varius odio, sed egestas sapien. Sed quis molestie justo. Aliquam ut turpis pretium nunc tempor ornare in a est. Mauris tristique tincidunt purus,
      at laoreet quam vehicula a. Nunc vel consequat nunc, eget ullamcorper augue. Nunc lobortis, sapien vitae eleifend bibendum, libero nisl congue justo, non vestibulum lectus libero nec nulla. Suspendisse ac elit pulvinar, pellentesque magna ac, venenatis
      elit. Vivamus eget pellentesque nisl, eu sollicitudin lorem. Fusce convallis orci a blandit commodo. Nulla at luctus tortor.
    </p>
    <nav aria-label="page navigation">
      <ul class="pagination justify-content-center mb-0">
        <li class="page-item disabled">
          <a class="page-link" href="#" tabindex="-1">Previous</a>
        </li>
        <li class="page-item"><a class="page-link" href="#">1</a></li>
        <li class="page-item"><a class="page-link" href="#">2</a></li>
        <li class="page-item"><a class="page-link" href="#">3</a></li>
        <li class="page-item"><a class="page-link" href="#">4</a></li>
        <li class="page-item"><a class="page-link" href="#">5</a></li>
        <li class="page-item"><a class="page-link" href="#">6</a></li>
        <li class="page-item"><a class="page-link" href="#">7</a></li>
        <li class="page-item"><a class="page-link" href="#">8</a></li>
        <li class="page-item"><a class="page-link" href="#">9</a></li>
        <li class="page-item">
          <a class="page-link" href="#">Next</a>
        </li>
      </ul>
    </nav>
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam auctor rutrum felis, non fermentum sem pulvinar in. Duis pulvinar, tellus vel suscipit suscipit, sem tortor tristique nisi, vitae pellentesque sapien dolor ut metus. Curabitur a sodales risus.
      Duis luctus lectus sit amet scelerisque aliquam. Nunc nec lectus congue ex eleifend tempus. Praesent et varius odio, sed egestas sapien. Sed quis molestie justo. Aliquam ut turpis pretium nunc tempor ornare in a est. Mauris tristique tincidunt purus,
      at laoreet quam vehicula a. Nunc vel consequat nunc, eget ullamcorper augue. Nunc lobortis, sapien vitae eleifend bibendum, libero nisl congue justo, non vestibulum lectus libero nec nulla. Suspendisse ac elit pulvinar, pellentesque magna ac, venenatis
      elit. Vivamus eget pellentesque nisl, eu sollicitudin lorem. Fusce convallis orci a blandit commodo. Nulla at luctus tortor.
    </p>
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam auctor rutrum felis, non fermentum sem pulvinar in. Duis pulvinar, tellus vel suscipit suscipit, sem tortor tristique nisi, vitae pellentesque sapien dolor ut metus. Curabitur a sodales risus.
      Duis luctus lectus sit amet scelerisque aliquam. Nunc nec lectus congue ex eleifend tempus. Praesent et varius odio, sed egestas sapien. Sed quis molestie justo. Aliquam ut turpis pretium nunc tempor ornare in a est. Mauris tristique tincidunt purus,
      at laoreet quam vehicula a. Nunc vel consequat nunc, eget ullamcorper augue. Nunc lobortis, sapien vitae eleifend bibendum, libero nisl congue justo, non vestibulum lectus libero nec nulla. Suspendisse ac elit pulvinar, pellentesque magna ac, venenatis
      elit. Vivamus eget pellentesque nisl, eu sollicitudin lorem. Fusce convallis orci a blandit commodo. Nulla at luctus tortor.
    </p>
  </div>
</div>

关于jquery - 修复在 Bootstrap 选项卡上无法正常工作的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54592180/

相关文章:

javascript - Vanilla JS MVC -- AJAX 成功时从模型通知 Controller

javascript - JS - 这不应该写得更好吗?一个函数 vs 多个函数?

javascript - 旋转 HTML5 视频并保存 Canvas

javascript - 使用 ECharts 中的 HTML 按钮激活/停用图表线?

css - 我怎样才能在jsp中解决这个问题?

javascript - jQuery 在文件输入更改时更改多个图像 src

javascript - 实现了 reCaptcha...仍然收到垃圾邮件

jquery - 有没有办法将 bootstrap 与 jquery 3.x 一起使用

javascript - Bootstrap 多选下拉列表未显示

javascript - 意外的 ng-ui-bootstrap typeahead 行为