将导航栏向下滚动到顶部后,将其固定到顶部

时间:2014-10-31 14:18:25

标签: javascript jquery html

我希望我的导航栏只有在到达时才会固定到顶部,而不是默认情况下(例如class =" navbar-fixed-top")。 Bootstrap词缀对我不起作用,所以我决定找一个JQuery solition。 Demo of what I want

HTML:

<div id="nav-wrapper"><!--nav-wrapper-->
        <div class="container"><!--container-->
            <div class="row" id="navigation"><!--header-->
                <div class="col-md-12"><!--col-md-12-->
                    <div class="nav"><!--nav-->
                        <div class="#">
                         <ul id="#">
                            <li id="#" class="..."><a href="...">Home</a></li>
                            <li id="menu-item-6478" class="..."><a href="...">About EFTI</a></li>
                            <li id="menu-item-27" class="..."><a href="...">Our Coaches</a></li>
                            <li id="menu-item-6469" class="..."><a href="...">Blog</a></li>
                            <li id="menu-item-6568" class="..."><a href="...">EFTI Forum</a></li>
                            <li id="menu-item-6477" class="..."><a href="...">Contact Us</a></li>
                        </ul></div>                </div><!--nav-->
                 </div><!--col-md-12-->
                <div class="clearfix"></div>
            </div><!--header-->
        </div><!--container-->
    </div>

与此相似的代码可以完成这项工作:

$(window).bind("scroll", function(){ 
var div_pos_from_top = $('#nav').offset().top - $(window).scrollTop(); 

if (div_pos_from_top < 300) { 
$('#nav').css('... , ...'); 
} else { 
$('#nav').css('... , ....'); 
} 
});

2 个答案:

答案 0 :(得分:2)

也不是最有效的循环。将var放在外面,这样我们就可以在文档加载时得到位置。但这是我发现的最佳方式,至少如果你要自己写点什么的话。希望有所帮助!

您的代码作为一个类nav,需要将其设置为id。

var position = $("#nav").offset().top;

function stickyHeader() {
  if (position < $(document).scrollTop()) {
    $("#nav").addClass("sticky");
  } else {
    $("#nav").removeClass("sticky");
  }
}

$(window).scroll(function() {
  stickyHeader();
});
#nav {
  width: 100%;
  height: 40px;
  background: yellow;
  line-height: 40px;
  transition: all 1s ease-in-out;
}
#nav ul li {
  display: inline-block;
}
.sticky {
  position: fixed;
  top: 0;
  left: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="nav-wrapper">
  <!--nav-wrapper-->
  <div class="container">
    <!--container-->
    <div class="row" id="navigation">
      <!--header-->
      <div class="col-md-12">
        <!--col-md-12-->
        <div id="nav">
          <!--nav-->
          <div class="#">
            <ul id="#">
              <li id="#" class="..."><a href="...">Home</a>
              </li>
              <li id="menu-item-6478" class="..."><a href="...">About EFTI</a>
              </li>
              <li id="menu-item-27" class="..."><a href="...">Our Coaches</a>
              </li>
              <li id="menu-item-6469" class="..."><a href="...">Blog</a>
              </li>
              <li id="menu-item-6568" class="..."><a href="...">EFTI Forum</a>
              </li>
              <li id="menu-item-6477" class="..."><a href="...">Contact Us</a>
              </li>
            </ul>
          </div>
        </div>
        <!--nav-->
      </div>
      <!--col-md-12-->
      <div class="clearfix"></div>
    </div>
    <!--header-->

    <body>
      <h1>Scrolling Sticky Header</h1>

      <div class="content">
        <p>"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem
          quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam
          eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit
          qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"</p>
      </div>
      <div class="content">
        <p>"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem
          quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam
          eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit
          qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"</p>
        <p>"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem
          quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam
          eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit
          qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"</p>
      </div>
    </body>
  </div>
  <!--container-->
</div>

答案 1 :(得分:1)

这个想法很好看。我过去使用的是

$(document).scroll(function(){
  var scroll = $(document).scrollTop();
  if(scroll > 100) {
    $('#nav').addClass('fix');
  } else {
    $('#nav').removeClass('fix');
  }
});

也许循环不是最有效的,但它确实有效。