页面更改时的滚动恢复未完全滚动到顶部

Posted

技术标签:

【中文标题】页面更改时的滚动恢复未完全滚动到顶部【英文标题】:Scroll Restoration on page change doesn't fully scroll to top 【发布时间】:2022-01-21 14:14:27 【问题描述】:

滚动恢复会向上滚动页面的 8/10,但不是一直滚动。不确定我的 ScrollToTop 组件是否有缺陷,或者我是否在 App 组件中错误地使用了路由和切换标签。下面分别是 ScrollToTop 和 App 组件。

import  useEffect  from "react";
import  useLocation  from "react-router-dom";

function ScrollToTop() 
  const  pathname  = useLocation();

  useEffect(() => 
    window.scrollTo(0, 0);
  , [pathname]);

  return null;


export default ScrollToTop;
return (
    <div className="App">
      <Switch>
        <Route path='/explore'>
          <ScrollToTop />
          <Layout className='' currentUser=currentUser posts=posts handleLogout=handleLogout>
            <Explore posts=posts />
          </Layout >
        </Route>
        <Route path='/meta'>
          <ScrollToTop />
          <Layout currentUser=currentUser posts=posts handleLogout=handleLogout>
            <Meta currentUser=currentUser posts=posts />
          </Layout>
        </Route>
        <Route path='/mana'>
          <ScrollToTop>
            <Layout currentUser=currentUser posts=posts handleLogout=handleLogout>
              <Mana currentUser=currentUser posts=posts />
            </Layout>
          </ScrollToTop>
        </Route>
        <Route path='/crypto'>
          <ScrollToTop />
          <Layout currentUser=currentUser posts=posts handleLogout=handleLogout>
            <Crypto currentUser=currentUser posts=posts />
          </Layout>
        </Route>
        <Route path='/film'>
          <ScrollToTop />
          <Layout currentUser=currentUser posts=posts handleLogout=handleLogout>
            <Film currentUser=currentUser posts=posts />
          </Layout>
        </Route> 
      </Switch>
    </div >
  );


export default App; 

【问题讨论】:

【参考方案1】:

如果你想使用窗口对象进行滚动:

window.scroll(top:0,behavior:'smooth')

【讨论】:

在scrolltotop组件还是app组件中?【参考方案2】:

试试这个:

document.querySelector('body').scrollIntoView( 
  block: "start"
)

【讨论】:

感谢您这么快的回复。我应该在哪里插入这段代码? 应该放在useEffect()中useEffect(() =&gt; document.querySelector('body').scrollIntoView( block: "start" ) , [pathname]);替换window.scrollTo(0, 0); 哦,好吧,试过了,但没用。这可能与我如何在应用程序组件中的布局标记上方放置 标记有关吗? 我认为路由器工作不正常。正确的配置应该是这样的:import Switch, Route, useLocation, from "react-router-dom"; function App() const location = useLocation(); return( &lt;div className="App"&gt; &lt;Route render=( location ) =&gt; ( &lt;Switch&gt; &lt;Route path="/explore" exact component=Explore /&gt; &lt;/Switch&gt; ) /&gt; &lt;/div&gt; ) export default App 所以我的问题的解决方法是我必须从我的 app.css 文件中删除 overflow-x:hidden

以上是关于页面更改时的滚动恢复未完全滚动到顶部的主要内容,如果未能解决你的问题,请参考以下文章

在顶部添加新项目后,回收器视图未滚动到顶部,因为尚未发生对列表适配器的更改

更改路线不会在新页面中滚动到顶部

scss 滚动时的UI到顶部/页面到顶部按钮

再次滚动到顶部时的 TwoWayView 空白问题

Angular 7在子路由更改上禁用滚动到顶部

在路线更改和新组件加载不起作用后以角度滚动到顶部