我正在使用class
中的header
通过setState
将addEventListener
添加到componentDidMount
。 state
的scrolling
在false
的0
处设置为scrollY
,并在滚动时将state
更新为true
并添加class
。
举个例子
componentDidMount() {
window.addEventListener('scroll', this.handleScroll);
}
componentWillUnmount() {
window.removeEventListener('scroll', this.handleScroll);
}
handleScroll = () => {
if (window.scrollY === 0 && this.state.scrolling === true) {
this.setState({ scrolling: false });
} else if (window.scrollY !== 0 && this.state.scrolling !== true) {
this.setState({ scrolling: true });
}
};
在GatsbyJS
layout
中。当用户返回页面顶部时,它在页面和模板之间完美地工作。但是,在某些情况下,例如通过
route
更改modal
或用户在浏览器上回击时,动作将保持先前的scrollY
位置。在这种情况下,
scrollY
不是0
,但是state
的scrolling
仍显示为false
。我想这是因为即使scrollY
显示了实际位置,state
scrolling
最初还是false
直到用户滚动。这在console
中描述如果
state
不是scrolling
,如何确保在更改路线时将true
scrollY
更新为0
? 最佳答案
实例化后,应该运行一次handleScroll
方法以捕获初始状态。现在,您依靠的是滚动位置在最顶部,但是正如您所发现的,回到历史记录会导致不同的初始状态。
componentDidMount() {
window.addEventListener('scroll', this.handleScroll);
this.handleScroll();
}