Javascript GoToTop按钮在后续使用中不起作用
我有一个组件可以将页面滚动到顶部。按钮第一次工作,但如果我尝试再次向下滚动,它就不工作了。请告知Javascript GoToTop按钮在后续使用中不起作用,javascript,reactjs,setinterval,react-hooks,clearinterval,Javascript,Reactjs,Setinterval,React Hooks,Clearinterval,我有一个组件可以将页面滚动到顶部。按钮第一次工作,但如果我尝试再次向下滚动,它就不工作了。请告知 const GoToTop = (props) => { const [intervalId, setIntervalId] = useState(0); const scrollStep = () => { if (window.pageYOffset === 0) { clearInt
const GoToTop = (props) => {
const [intervalId, setIntervalId] = useState(0);
const scrollStep = () => {
if (window.pageYOffset === 0) {
clearInterval(intervalId);
}
window.scroll(0, window.pageYOffset - props.scrollStepInPx);
setIntervalId(0);
};
const scrollToTop = () => {
setIntervalId(setInterval(scrollStep, props.delayInMs));
};
return (
<button
title='Back to top'
type='button'
className='scroll'
aria-label='Back to top'
onClick={scrollToTop}>
<span>
<FontAwesomeIcon
icon='angle-up'
width='1em'
className='arrow-up'
/></span>
</button>
);
};
GoToTop.defaultProps = {
scrollStepInPx: 50,
delayInMs: 16.66
};
const GoToTop=(道具)=>{
const[intervalId,setIntervalId]=useState(0);
常量滚动步骤=()=>{
如果(window.pageYOffset==0){
clearInterval(intervalId);
}
window.scroll(0,window.pageYOffset-props.scrollStepInPx);
setIntervalId(0);
};
常量scrollToTop=()=>{
setIntervalId(setInterval(scrollStep,props.delayInMs));
};
返回(
);
};
GoToTop.defaultProps={
滚动步进X:50,
延迟毫秒:16.66
};
不确定您是真的想延迟滚动到顶部,还是只想快速滚动到顶部,但您可以尝试拨打电话
window.scroll({
top: 0,
left: 0,
behavior: 'smooth'
});
还有你的代码
const GoToTop = (props) => {
const scrollToTop = () => {
window.scroll({
top: 0,
left: 0,
behavior: 'smooth'
});
};
return (
<button
title='Back to top'
type='button'
className='scroll'
aria-label='Back to top'
onClick={scrollToTop}>
<span>
<FontAwesomeIcon
icon='angle-up'
width='1em'
className='arrow-up'
/></span>
</button>
);
};
const GoToTop=(道具)=>{
常量scrollToTop=()=>{
滚动窗口({
排名:0,
左:0,,
行为:“平滑”
});
};
返回(
);
};
有控制台错误吗?我甚至第一次都不能让它工作。OP第一次用一个答案中的位更新它时,它就工作了,而这个答案使它不能工作work@TJ添加回旧代码。抱歉搞混了。这是如何解决该组件只在第一次工作这一事实的?@Vencovsky甚至没有上升@a2441918打开您的控制台并试用,因为stackblitz在另一个窗口中,它可能不在work@a2441918对我来说,你的例子真是太棒了,伙计。现在可以了。谢谢你知道为什么我的实现不起作用吗?