我正在使用盖茨比2.2.10设置一个网站,链接组件保留了上一页的滚动位置,并且在点击时没有滚动回顶部。
<div className="Footer__legal body">
<p>© {new Date().getFullYear()} My Nice Company</p>
<Link to="/privacy-policy">Privacy Policy</Link>
<Link to="/page-2">Page 2 Link component</Link>
</div>
预期行为:
当您单击“隐私政策”、“第2页”或网站底部的任何页面时,我希望页面加载时用户返回顶部。
实际行为:
用户停留在当前页面的滚动位置
如果您的页面是无状态功能组件,则可以使用useffect
钩子滚动回页面顶部,假设您使用的是graphql
,因此您的组件将一些数据作为参数。这样,每次数据更改时,您都会滚动到页面顶部(工作方式类似于componentDidUpdate)。
const PageCmp = ({ data }) => {
...
useEffect(() => {
window.scrollTo(0,0)
}, [data])
...
}
如果您在主体上设置了溢出:隐藏溢出或溢出:自动溢出,则会出现此问题!
您还可以修改盖茨比浏览器。js并为每个滚动更新实现一个钩子:
// in gastby-browser.js
exports.shouldUpdateScroll = ({
routerProps: { location },
getSavedScrollPosition,
}) => {
const { pathname } = location
// list of routes for the scroll-to-top-hook
const scrollToTopRoutes = [`/privacy-policy`, `/page-2`]
// if the new route is part of the list above, scroll to top (0, 0)
if (scrollToTopRoutes.indexOf(pathname) !== -1) {
window.scrollTo(0, 0)
}
return false
}
您可以在GitHub或GatsbyJS网站上的shouldUpdateScroll
文档中找到shouldUpdateScroll
的代码。
抱歉,我的英语很差。 我想要确切的位置。并且在活动/片段被销毁后(不管是我销毁它还是系统销毁它),我重新打开活动/片段,< code > recycle view 也可以在它被销毁的相同位置。 “相同”并不意味着“项目位置”,因为项目可能只是上次显示的一部分。 我想恢复完全相同的位置。 我尝试了下面的一些方法,但没有人是完美的。 有人可以帮忙吗? 1.First方式。 我使用< code>onSc
问题内容: 我的问题是当我在回收视图中滚动数据时,所以加载了新数据,但问题是当新数据加载时,回收视图从第一个产品开始, 我需要保持旧的位置,只滚动新数据,而不滚动所有旧数据 目前,我正在添加文件adeptoer文件和主文件的完整代码, 问题答案: 试试这个:
问题内容: 使用呈现对象列表。假设此列表很长,并且用户正在滚动到底部以查看一些对象。 当用户观察对象时,新项目将添加到列表的顶部。这导致被观察对象改变其位置,即,用户在被观察对象的同一位置突然看到其他东西。 添加新项目后,如何将观察到的对象保持在同一位置? 问题答案: 通过使用的属性,它可能非常优雅地解决了。我使用了两个指令- 一个处理包装器元素的滚动位置,另一个处理新元素。如果有什么不清楚的地方
获得一台新电脑并从GitHub克隆了我的项目,然后运行,但随后它安装时出现了许多错误,因此现在我运行了,并获得了下面的错误消息。请帮助我 错误#10226配置 找不到在“C:\Users\Administrator\Desktop\Projects\IamJude\gatsby config.js”中声明的“gatsby plugin sharp”插件。 尝试在C:\Users\Administr
看看这支笔:https://codepen.io/segmentationfaulter/pen/XzgJyV 为了方便起见,我还在这里粘贴代码。打开上面的画笔后,您将看到一个滑块被渲染。向右滚动滑块,然后单击按钮,您将看到滑块以不同的数字重新渲染,但滑块的滚动位置不会重置。为什么滚动位置没有复位?谢谢
我有一个从Firebase数据库检索数据的简单片段。我使用firebase recycler视图显示检索数据。在滚动或屏幕旋转后,我无法强制回收器视图(或线性布局管理器)恢复滚动位置。 我在这里找到了一些答案,但它们不起作用。 我的代码是: 公共类NewsListFragment扩展了ParentNewsFragment{ } 最后的showToast方法显示了位置的真实数量,但recyclerv