我将某些div设置为滚动显示后,结果是打开页面(或重新加载)时div没有隐藏
我试图让 -componentWillMount,和 -componentDidMount 在生命周期中,但是我得到了相同的结果
这是代码
constructor(props){
super(props);
this.state={
isHide:false,
};
this.hideBar = this.hideBar.bind(this)
}
hideBar(){
let {isHide} = this.state;
window.scrollY < 300 && this.prev ?
!isHide && this.setState({isHide:true})
:
isHide && this.setState({isHide:false})
this.prev = window.scrollY;
}
componentWillMount(){
window.addEventListener('scroll',this.hideBar);
}
componentWillUnmount(){
window.removeEventListener('scroll',this.hideBar);
}
render() {
let classHide=this.state.isHide?"newsletterhide":""
return (
<div className={classHide+"newsletter-container"}>
<div className="newsletter-details">
<h3 style={{margin:0, fontSize:"0.9em"}}>
Get latest updates in web technologies
</h3>
<p className="p-newsletter">
I write articles related to web technologies, such as design trends, development tools, UI/UX case studies and reviews, and more. Sign up to my newsletter to get them all.
</p>
</div>
<div className="newsletter-form">
<input
name="email"
type="email"
placeholder="Email address"
className="newsletter-input"
/>
<button className="newsletter-button">
Count me in!
</button>
</div>
</div>
);
}
感谢您的帮助!希望其他需要它的人有用。
答案 0 :(得分:0)
据我了解,您希望在用户在页面中向下滚动时显示订阅新闻通讯框。 你为什么不写:
hideBar() {
this.setState({
isHidden: window.scrollY < 300
});
}
在开始时将isHidden
设置为true
应该可以解决您的问题。如果没有,请在hideBar
处调用componentDidMount
方法。
此外,我建议您在用户花一些时间浏览网站后显示新闻稿框;例如在他/她阅读文章15秒后显示。
答案 1 :(得分:0)
假设问题是在重新加载期间存在页面偏移,并且您的意图是然后显示div,
componentDidMount() {
if(window.pageYOffset) this.setState({ isHide: false, });
}