[英]How can I change the position of my navbar to fixed after scrolling to the top?
我想将导航栏位置更改为固定。
这是我的代码:
$(document).ready(function() { $(document).scroll(function() { var scroll = $(this).scrollTop(); var topDist = $("#container").position(); if (scroll > topDist.top) { $('nav').css({ "position": "fixed", "top": "0" }); } else { $('nav').css({ "position": "static", "top": "auto" }); } }); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="container"> <nav> <ul> <li><a href="#">LINK 1</a></li> <li><a href="#">LINK 2</a></li> <li><a href="#">LINK 3</a></li> <li><a href="#">LINK 4</a></li> </ul> </nav>
这是演示链接
您可以利用position: sticky
属性,目前大多数浏览器都支持该属性:
#container {
position: sticky;
top: 0;
}
https://jsfiddle.net/wqp9430L/
您的JS实际上没有触发,因为您正在检测$(document)
上的scroll
,但是您的文档和窗口实际上并未滚动,因为您的内容实际上是在.parallax
滚动。 因此,无需检测文档上的滚动,而必须检测parallax
滚动:
$(document).ready(function() {
$('.parallax').scroll(function () {
var scroll = $(this).scrollTop();
var topDist = $("#container").offset();
if (scroll > topDist.top) {
$('nav').css({"position":"fixed","top":"0"});
} else {
$('nav').css({"position":"static","top":"auto"});
}
});
});
现在,尽管这在获取实际滚动值方面起作用: https : //jsfiddle.net/wqp9430L/2/,您会注意到有一些问题。
滚动偏移量更改时,因此应将topDist
移动到scroll
功能之外以获取初始值,但是
如果小提琴加载得太快(在图像完成渲染之前) topDist
变得准确,那么您必须确保在完全渲染图像之后计算topDist
,然后还要
将nav
更改为position: fixed
使导航fixed
在主体上,但是由于您不是在主体中滚动而是在.parallax
滚动,因此您不会看到导航。
由于这些原因,您应该使用CSS解决方案,但是如果您坚持使用JS,则解决方案应该更像:
if (imgLoaded) {
var topDist = $("#container").offset().top;
$('.parallax').scroll(function () {
var scroll = $(this).scrollTop();
if (scroll > topDist) {
$('nav').css({
position: 'fixed',
top: scroll + 'px'
});
} else {
$('nav').css({
position: 'static',
top: 'auto'
});
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.