我一直在互联网上查找滚动时隐藏菜单的vanilla Javascript实现 - 并找到了这个解决方案:
var previousScroll = window.pageYOffset;
window.addEventListener( 'scroll', hideMenu );
function hideMenu() {
var menubar = document.querySelector('.navigation');
var currentScroll = window.pageYOffset;
if ( currentScroll > previousScroll) {
menubar.style.transform = "translateY(-60px)";
}
else {
menubar.style.transform = "";
}
previousScroll = currentScroll;
}
我不明白的是,为什么会这样?为什么变量“previousScroll”值可能与“currentScroll”值不同?
我试图将previousScroll放在函数hideMenu中,但它不起作用。
答案 0 :(得分:1)
执行滚动后调用函数hideMenu()
。
因此,windows.pageYOffset
会在滚动后返回Y位置,而previousScroll
则是<之前滚动。
这就是为什么它鞭打;)
以下是如何逐步运作的:
第1步(已加载页面)
第2步(滚动)
'scroll'
事件被触发)'scroll'
回调函数被调用(此处为hideMenu()
)查看此jsFiddle
答案 1 :(得分:0)
用户滚动时会调用hideMenu函数。因此,我们可以访问页面中的当前pageYOffset。
在滚动之前我们无法知道我们在哪里。也就是说,除非我们在“滚动”之前保留对它的引用。事件发生了。
如果您将变量放在函数中,则previous和current将返回相同的值,我们无法比较它们。
答案 2 :(得分:0)
currentScroll
会更新。它表示当前的滚动偏移量。
如果用户向下滚动(currentScroll > previousScroll
),我们决定隐藏菜单栏。否则我们会重置其位置。
最后,我们更新previousScroll
以保留下一个hideMenu
函数调用的最后滚动位置(步骤1到3)