使固定的导航栏停在页脚

时间:2017-01-05 17:56:17

标签: javascript jquery html css

我需要让这个元素(导航栏)停在页脚。编写jQuery时我遇到了太多麻烦,所以它会在顶部遇到它时移动,但是当它达到页脚时我无法停止它。我尝试使用普通的Javascript和不同的jQueries,但只有这个代码才有效。谢谢!



var scrolljsTop = $('#scrolljs').offset().top;
$(window).scroll(function() {
  var currentScroll = $(window).scrollTop();
  if (currentScroll >= scrolljsTop) {
    $('#scrolljs').css({
      position: 'fixed',
      top: '0'
    });
  } else {
    $('#scrolljs').css({
      position: 'relative'
    });
  }
});

#cssmenu {
  padding: 0;
  margin: 0;
  margin-top: 10px;
  border: 0;
  line-height: 1;
  height: 1560px;
  box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.2), 0 12px 26px 0 rgba(0, 0, 0, 0.19);
}
#cssmenu ul,
#cssmenu ul li,
#cssmenu ul ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
#cssmenu ul {
  position: relative;
  z-index: 597;
  float: left;
}
#cssmenu ul li {
  float: left;
  min-height: 1px;
  line-height: 1em;
  vertical-align: middle;
  position: relative;
}
#cssmenu ul li.hover,
#cssmenu ul li:hover {
  position: relative;
  z-index: 599;
  cursor: default;
}
#cssmenu ul ul {
  visibility: hidden;
  position: absolute;
  top: 100%;
  left: 0px;
  z-index: 598;
  width: 100%;
}
#cssmenu ul ul li {
  float: none;
}
#cssmenu ul ul ul {
  top: -2px;
  right: 0;
}
#cssmenu ul li:hover > ul {
  visibility: visible;
}
#cssmenu ul ul {
  top: 1px;
  left: 99%;
}
#cssmenu ul li {
  float: none;
}
#cssmenu ul ul {
  margin-top: 1px;
}
#cssmenu ul ul li {
  font-weight: normal;
}
/* Custom CSS Styles */

#cssmenu {
  width: 200px;
  background: #333;
  font-family: 'Oxygen Mono', Tahoma, Arial, sans-serif;
  font-size: 12px;
  zoom: 1;
  border-right: 3px solid #1b9bff;
  color: #fff;
}
#cssmenu:before {
  content: '';
  display: block;
}
#cssmenu:after {
  content: '';
  display: table;
  clear: both;
}
#cssmenu a {
  display: block;
  padding: 15px 20px;
  color: #fff;
  text-decoration: none;
  text-transform: uppercase;
}
#cssmenu > ul {
  width: 200px;
}
#cssmenu ul ul {
  width: 200px;
}
#cssmenu > ul > li > a {
  border-right: 3px solid #1b9bff;
  color: #fff;
}
#cssmenu > ul > li > a:hover {
  color: #fff;
}
#cssmenu > ul > li.active a {
  background: #1b9bff;
}
#cssmenu > ul > li a:hover,
#cssmenu > ul > li:hover a {
  background: #006fc5;
}
#cssmenu li {
  position: relative;
}
#cssmenu ul li.has-sub > a:after {
  content: '+';
  position: absolute;
  top: 50%;
  right: 15px;
  margin-top: -6px;
}
#cssmenu ul ul li.first {
  -webkit-border-radius: 0 3px 0 0;
  -moz-border-radius: 0 3px 0 0;
  border-radius: 0 3px 0 0;
}
#cssmenu ul ul li.last {
  -webkit-border-radius: 0 0 3px 0;
  -moz-border-radius: 0 0 3px 0;
  border-radius: 0 0 3px 0;
  border-bottom: 0;
}
#cssmenu ul ul {
  -webkit-border-radius: 0 3px 3px 0;
  -moz-border-radius: 0 3px 3px 0;
  border-radius: 0 3px 3px 0;
}
#cssmenu ul ul {
  border: 1px solid #0082e7;
}
#cssmenu ul ul a {
  font-size: 12px;
  color: #fff;
}
#cssmenu ul ul a:hover {
  color: #fff;
}
#cssmenu ul ul li {
  border-bottom: 1px solid #0082e7;
}
#cssmenu ul ul li:hover > a {
  background: #4eb1ff;
  color: #fff;
}
#cssmenu.align-right > ul > li > a {
  border-left: 4px solid #1b9bff;
  border-right: none;
}
#cssmenu.align-right {
  float: right;
}
#cssmenu.align-right li {
  text-align: right;
}
#cssmenu.align-right ul li.has-sub > a:before {
  content: '+';
  position: absolute;
  top: 50%;
  left: 15px;
  margin-top: -6px;
}
#cssmenu.align-right ul li.has-sub > a:after {
  content: none;
}
#cssmenu.align-right ul ul {
  visibility: hidden;
  position: absolute;
  top: 0;
  left: -100%;
  z-index: 598;
  width: 100%;
}
#cssmenu.align-right ul ul li.first {
  -webkit-border-radius: 3px 0 0 0;
  -moz-border-radius: 3px 0 0 0;
  border-radius: 3px 0 0 0;
}
#cssmenu.align-right ul ul li.last {
  -webkit-border-radius: 0 0 0 3px;
  -moz-border-radius: 0 0 0 3px;
  border-radius: 0 0 0 3px;
}
#cssmenu.align-right ul ul {
  -webkit-border-radius: 3px 0 0 3px;
  -moz-border-radius: 3px 0 0 3px;
  border-radius: 3px 0 0 3px;
}
#footer {
  height:500px;
  background-color:#2f3a5f
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<div id="cssmenu">
  <ul id="scrolljs">
    <li class="active" id="social-float">
      <a href="#" target="_blank">Home</a>
    </li>
    <li><a href="#">Menus</a>
    </li>
    <li><a href="#">Settings</a>
    </li>
    <li><a href="#">Contact</a>
    </li>
  </ul>
</div>
</div>
 <div id="footer"></div>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:0)

在你的jquery中,将position: fixed更改为position: absolute所以它看起来像这样:

var scrolljsTop = $('#scrolljs').offset().top;
$(window).scroll(function() {
  var currentScroll = $(window).scrollTop();
  if (currentScroll >= scrolljsTop) {
    $('#scrolljs').css({
      position: 'absolute',
      top: '0'
    });
  } else {
    $('#scrolljs').css({
      position: 'relative'
    });
  }
});

http://codepen.io/kawnah/pen/EZaeYg

请注意,由于您的菜单太大,因此当用户滚动时它会停止。

答案 1 :(得分:0)

将您的cssmenu包裹到ID为content

的div中
<div id='content'>
  <div id="cssmenu">
  <ul id="scrolljs">
    <li class="active" id="social-float">
      <a href="#" target="_blank">Home</a>
    </li>
    <li><a href="#">Menus</a>
    </li>
    <li><a href="#">Settings</a>
    </li>
    <li><a href="#">Contact</a>
    </li>
  </ul>
</div>
</div>

在你的JQuery中

获取content div和csmenu div

的高度之间的差异
//Get the differnce of the two divs height here
var def_height =  $('#content').height() - $('#scrolljs').height(); 

现在,在jQuery中的scroll事件侦听器中,将top设置为上面计算的def_height的最大值。

/*
  Set max top scroll to the def_height
*/
var scroll = (currentScroll<def_height)?currentScroll:def_height;

$('#scrolljs').css('top',scroll + 'px');

这是完整更新的jQuery

var scrolljsTop = $('#scrolljs').offset().top;

//Get the differnce of the two divs height here
var def_height =  $('#content').height() - $('#scrolljs').height();

$(window).scroll(function() {

  var currentScroll = $(window).scrollTop();

  if (currentScroll >= scrolljsTop) {
    /*
       Set max top scroll to the def_height
    */
    var scroll = (currentScroll<def_height)?currentScroll:def_height;

    $('#scrolljs').css('top',scroll + 'px');
  } else {
     $('#scrolljs').css('top','0');
  }
});

这是更新的代码段

var scrolljsTop = $('#scrolljs').offset().top;

//Get the differnce of the two divs height here
var def_height =  $('#content').height() - $('#scrolljs').height();

$(window).scroll(function() {
  var currentScroll = $(window).scrollTop();
  if (currentScroll >= scrolljsTop) {
    /*
       Set max top scroll to the def_height
    */
    var scroll = (currentScroll<def_height)?currentScroll:def_height;
    
    $('#scrolljs').css('top',scroll + 'px');
  } else {
     $('#scrolljs').css('top','0');
  }
});
#cssmenu {
  padding: 0;
  margin: 0;
  margin-top: 10px;
  border: 0;
  line-height: 1;
  height: 1560px;
  box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.2), 0 12px 26px 0 rgba(0, 0, 0, 0.19);
}
#cssmenu ul,
#cssmenu ul li,
#cssmenu ul ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
#cssmenu ul {
  position: relative;
  z-index: 597;
  float: left;
}
#cssmenu ul li {
  float: left;
  min-height: 1px;
  line-height: 1em;
  vertical-align: middle;
  position: relative;
}
#cssmenu ul li.hover,
#cssmenu ul li:hover {
  position: relative;
  z-index: 599;
  cursor: default;
}
#cssmenu ul ul {
  visibility: hidden;
  position: absolute;
  top: 100%;
  left: 0px;
  z-index: 598;
  width: 100%;
}
#cssmenu ul ul li {
  float: none;
}
#cssmenu ul ul ul {
  top: -2px;
  right: 0;
}
#cssmenu ul li:hover > ul {
  visibility: visible;
}
#cssmenu ul ul {
  top: 1px;
  left: 99%;
}
#cssmenu ul li {
  float: none;
}
#cssmenu ul ul {
  margin-top: 1px;
}
#cssmenu ul ul li {
  font-weight: normal;
}
/* Custom CSS Styles */

#cssmenu {
  width: 200px;
  background: #333;
  font-family: 'Oxygen Mono', Tahoma, Arial, sans-serif;
  font-size: 12px;
  zoom: 1;
  border-right: 3px solid #1b9bff;
  color: #fff;
}
#cssmenu:before {
  content: '';
  display: block;
}
#cssmenu:after {
  content: '';
  display: table;
  clear: both;
}
#cssmenu a {
  display: block;
  padding: 15px 20px;
  color: #fff;
  text-decoration: none;
  text-transform: uppercase;
}
#cssmenu > ul {
  width: 200px;
}
#cssmenu ul ul {
  width: 200px;
}
#cssmenu > ul > li > a {
  border-right: 3px solid #1b9bff;
  color: #fff;
}
#cssmenu > ul > li > a:hover {
  color: #fff;
}
#cssmenu > ul > li.active a {
  background: #1b9bff;
}
#cssmenu > ul > li a:hover,
#cssmenu > ul > li:hover a {
  background: #006fc5;
}
#cssmenu li {
  position: relative;
}
#cssmenu ul li.has-sub > a:after {
  content: '+';
  position: absolute;
  top: 50%;
  right: 15px;
  margin-top: -6px;
}
#cssmenu ul ul li.first {
  -webkit-border-radius: 0 3px 0 0;
  -moz-border-radius: 0 3px 0 0;
  border-radius: 0 3px 0 0;
}
#cssmenu ul ul li.last {
  -webkit-border-radius: 0 0 3px 0;
  -moz-border-radius: 0 0 3px 0;
  border-radius: 0 0 3px 0;
  border-bottom: 0;
}
#cssmenu ul ul {
  -webkit-border-radius: 0 3px 3px 0;
  -moz-border-radius: 0 3px 3px 0;
  border-radius: 0 3px 3px 0;
}
#cssmenu ul ul {
  border: 1px solid #0082e7;
}
#cssmenu ul ul a {
  font-size: 12px;
  color: #fff;
}
#cssmenu ul ul a:hover {
  color: #fff;
}
#cssmenu ul ul li {
  border-bottom: 1px solid #0082e7;
}
#cssmenu ul ul li:hover > a {
  background: #4eb1ff;
  color: #fff;
}
#cssmenu.align-right > ul > li > a {
  border-left: 4px solid #1b9bff;
  border-right: none;
}
#cssmenu.align-right {
  float: right;
}
#cssmenu.align-right li {
  text-align: right;
}
#cssmenu.align-right ul li.has-sub > a:before {
  content: '+';
  position: absolute;
  top: 50%;
  left: 15px;
  margin-top: -6px;
}
#cssmenu.align-right ul li.has-sub > a:after {
  content: none;
}
#cssmenu.align-right ul ul {
  visibility: hidden;
  position: absolute;
  top: 0;
  left: -100%;
  z-index: 598;
  width: 100%;
}
#cssmenu.align-right ul ul li.first {
  -webkit-border-radius: 3px 0 0 0;
  -moz-border-radius: 3px 0 0 0;
  border-radius: 3px 0 0 0;
}
#cssmenu.align-right ul ul li.last {
  -webkit-border-radius: 0 0 0 3px;
  -moz-border-radius: 0 0 0 3px;
  border-radius: 0 0 0 3px;
}
#cssmenu.align-right ul ul {
  -webkit-border-radius: 3px 0 0 3px;
  -moz-border-radius: 3px 0 0 3px;
  border-radius: 3px 0 0 3px;
}
#footer {
  height:500px;
  background-color:#2f3a5f
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="content">
<div id="cssmenu">
  <ul id="scrolljs">
    <li class="active" id="social-float">
      <a href="#" target="_blank">Home</a>
    </li>
    <li><a href="#">Menus</a>
    </li>
    <li><a href="#">Settings</a>
    </li>
    <li><a href="#">Contact</a>
    </li>
  </ul>
</div>
</div>
 <div id="footer"></div>

答案 2 :(得分:0)

您需要页脚偏移,在当前滚动时需要添加windowinnerHeight。我希望这能帮助你清楚。如果您有任何疑问,请在评论中提问我。 :)。 FiddleLiveDemo

&#13;
&#13;
   
$(window).scroll(function() {
var scrollHeight= ($('#scrolljs').offset().top + $('#scrolljs').height());
var currentScroll = ($(document).scrollTop() + window.innerHeight);
var footerOffset = $('#footer').offset().top;

 if (scrollHeight >= footerOffset){
    $('#scrolljs').css('position', 'absolute');
   }
  else if (currentScroll < footerOffset){
    $('#scrolljs').css('position', 'fixed'); // restore when you scroll up
 }
});
&#13;
#cssmenu {
  padding: 0;
  margin: 0;
  margin-top: 10px;
  border: 0;
  line-height: 1;
  height: 1560px;
  box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.2), 0 12px 26px 0 rgba(0, 0, 0, 0.19);
}
#cssmenu ul,
#cssmenu ul li,
#cssmenu ul ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
#cssmenu ul {
  position: relative;
  z-index: 597;
  float: left;
}
#cssmenu ul li {
  float: left;
  min-height: 1px;
  line-height: 1em;
  vertical-align: middle;
  position: relative;
}
#cssmenu ul li.hover,
#cssmenu ul li:hover {
  position: relative;
  z-index: 599;
  cursor: default;
}
#cssmenu ul ul {
  visibility: hidden;
  position: absolute;
  top: 100%;
  left: 0px;
  z-index: 598;
  width: 100%;
}
#cssmenu ul ul li {
  float: none;
}
#cssmenu ul ul ul {
  top: -2px;
  right: 0;
}
#cssmenu ul li:hover > ul {
  visibility: visible;
}
#cssmenu ul ul {
  top: 1px;
  left: 99%;
}
#cssmenu ul li {
  float: none;
}
#cssmenu ul ul {
  margin-top: 1px;
}
#cssmenu ul ul li {
  font-weight: normal;
}
/* Custom CSS Styles */

#cssmenu {
  width: 200px;
  background: #333;
  font-family: 'Oxygen Mono', Tahoma, Arial, sans-serif;
  font-size: 12px;
  zoom: 1;
  border-right: 3px solid #1b9bff;
  color: #fff;
}
#cssmenu:before {
  content: '';
  display: block;
}
#cssmenu:after {
  content: '';
  display: table;
  clear: both;
}
#cssmenu a {
  display: block;
  padding: 15px 20px;
  color: #fff;
  text-decoration: none;
  text-transform: uppercase;
}
#cssmenu > ul {
  width: 200px;
}
#cssmenu ul ul {
  width: 200px;
}
#cssmenu > ul > li > a {
  border-right: 3px solid #1b9bff;
  color: #fff;
}
#cssmenu > ul > li > a:hover {
  color: #fff;
}
#cssmenu > ul > li.active a {
  background: #1b9bff;
}
#cssmenu > ul > li a:hover,
#cssmenu > ul > li:hover a {
  background: #006fc5;
}
#cssmenu li {
  position: relative;
}
#cssmenu ul li.has-sub > a:after {
  content: '+';
  position: absolute;
  top: 50%;
  right: 15px;
  margin-top: -6px;
}
#cssmenu ul ul li.first {
  -webkit-border-radius: 0 3px 0 0;
  -moz-border-radius: 0 3px 0 0;
  border-radius: 0 3px 0 0;
}
#cssmenu ul ul li.last {
  -webkit-border-radius: 0 0 3px 0;
  -moz-border-radius: 0 0 3px 0;
  border-radius: 0 0 3px 0;
  border-bottom: 0;
}
#cssmenu ul ul {
  -webkit-border-radius: 0 3px 3px 0;
  -moz-border-radius: 0 3px 3px 0;
  border-radius: 0 3px 3px 0;
}
#cssmenu ul ul {
  border: 1px solid #0082e7;
}
#cssmenu ul ul a {
  font-size: 12px;
  color: #fff;
}
#cssmenu ul ul a:hover {
  color: #fff;
}
#cssmenu ul ul li {
  border-bottom: 1px solid #0082e7;
}
#cssmenu ul ul li:hover > a {
  background: #4eb1ff;
  color: #fff;
}
#cssmenu.align-right > ul > li > a {
  border-left: 4px solid #1b9bff;
  border-right: none;
}
#cssmenu.align-right {
  float: right;
}
#cssmenu.align-right li {
  text-align: right;
}
#cssmenu.align-right ul li.has-sub > a:before {
  content: '+';
  position: absolute;
  top: 50%;
  left: 15px;
  margin-top: -6px;
}
#cssmenu.align-right ul li.has-sub > a:after {
  content: none;
}
#cssmenu.align-right ul ul {
  visibility: hidden;
  position: absolute;
  top: 0;
  left: -100%;
  z-index: 598;
  width: 100%;
}
#cssmenu.align-right ul ul li.first {
  -webkit-border-radius: 3px 0 0 0;
  -moz-border-radius: 3px 0 0 0;
  border-radius: 3px 0 0 0;
}
#cssmenu.align-right ul ul li.last {
  -webkit-border-radius: 0 0 0 3px;
  -moz-border-radius: 0 0 0 3px;
  border-radius: 0 0 0 3px;
}
#cssmenu.align-right ul ul {
  -webkit-border-radius: 3px 0 0 3px;
  -moz-border-radius: 3px 0 0 3px;
  border-radius: 3px 0 0 3px;
}
#footer {
  height:500px;
  background-color:#2f3a5f
}
&#13;
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<div>
<div id="cssmenu">
  <ul id="scrolljs">
    <li class="active" id="social-float">
      <a href="#" target="_blank">Home</a>
    </li>
    <li><a href="#">Menus</a>
    </li>
    <li><a href="#">Settings</a>
    </li>
    <li><a href="#">Contact</a>
    </li>
  </ul>
</div>
</div>
 <div id="footer"></div>
&#13;
&#13;
&#13;

相关问题