2019 年更新/调整
以下内容对于希望开发一个在您向下滚动时消失的标题的其他人可能很有用。我刚刚为我正在创建的网站完成了以下操作,该网站需要顶部标题在用户开始滚动时消失,但在他们开始向上滚动时重新出现;如果您要在网站上不断上下滚动,请不断应用此逻辑。
对于初学者,当用户滚动经过某个点(在本例中为 50 像素)时,我的 header 标记中会添加一个名为 nav-scrolled 的类。然后可以设置这个新类的样式以更改background-color,添加box-shadow 等...
$(function() {
var header = $(".nav-container");
$(window).scroll(function() {
var scroll = $(window).scrollTop();
if (scroll >= 50) {
header.addClass("nav-scrolled");
} else {
header.removeClass("nav-scrolled");
}
})
});
但是,这仅解决了当用户从页面顶部滚动时无法编辑标题样式的问题 - 而不是网站上的任何位置 - 以下解决了这个问题。
var userScroll;
var scrollTop = 0;
var delta = 5;
var navHeight = $('header').outerHeight();
$(window).scroll(function(event){
userScroll = true;
});
setInterval(function() {
if (userScroll) {
hasScrolled();
userScroll = false;
}
}, 250);
对我来说,下一步是按顺序添加和删除类show-nav 和hide-nav,它们的样式被设置为显示和隐藏导航菜单。以下检查用户是否已滚动(向上或向下)到高于我的 delta 变量的值。如果用户开始在网站上向上滚动,则添加 show-nav 类,并且标题从页面顶部过渡。如果用户向下滚动页面,则添加类hide-nav,并且隐藏标题。
function hasScrolled() {
var st = $(this).scrollTop();
// Ensures a higher scroll than $delta
if(Math.abs(scrollTop - st) <= delta)
return;
// If they scrolled down and are past the navbar, add class .nav-up.
// This is necessary so you never see what is "behind" the navbar.
if (st > scrollTop && st > navHeight){
// Scroll Down
$('header').removeClass('show-nav').addClass('hide-nav');
$('.nav-toggle').removeClass('open');
$('.menu-left').removeClass('collapse');
} else {
// Scroll Up
if(st + $(window).height() < $(document).height()) {
$('header').removeClass('hide-nav').addClass('show-nav');
}
}
scrollTop = st;
}