我有一个单页网站,example.com。它有两个部分:页面顶部的intro和页面底部的contact。如果我想让某人在不必浏览intro的情况下访问contact部分,我会给他们这个链接:example.com/#contact。下面我将讨论这些访问。
浏览器会自动滚动到contact部分,但会忽略固定在页面顶部的导航,因此contact部分会被滚动到导航之后,使得contact部分的顶部变得不可见。我想通过JavaScript来纠正这个问题,方法是从滚动位置中减去固定导航的高度。让我们把这个函数称为
什么时候应该调用
那么我应该监听哪个事件呢?如果这样的事件不存在,
浏览器会自动滚动到contact部分,但会忽略固定在页面顶部的导航,因此contact部分会被滚动到导航之后,使得contact部分的顶部变得不可见。我想通过JavaScript来纠正这个问题,方法是从滚动位置中减去固定导航的高度。让我们把这个函数称为
scrollCorrector
。问题是我不知道何时会发生这样的自动滚动,所以scrollCorrector
并不总是被调用。什么时候应该调用
scrollCorrector
呢?当由于哈希部分而发生自动滚动时。为什么不使用onscroll
呢?因为这样我无法区分自动滚动和用户滚动。为什么不在每个<a href="example.com/#contact">
上使用onclick
呢?我会使用它,但如果用户通过浏览器的后退按钮进行导航呢?好吧,我还将使用onpopstate
。但如果用户通过手动重写URL从example.com/#intro跳转到example.com/#contact呢?那么我将使用onhashchange
。但是,如果用户已经在example.com/#contact上了,并单击地址栏,然后按回车键而没有进行任何修改呢?那么以上所有方法均无法帮助。那么我应该监听哪个事件呢?如果这样的事件不存在,
scrollCorrector
如何知道刚刚发生了自动滚动?