Link 转到最后滚动位置而不是锚点
Link going to last scroll position instead of anchor
在我的 React 应用程序上,我有两个页面:页面 A(主页)和页面 B。
在页面 B 上,我有 link 转到页面 A 的特定部分。
在页面 A 上:
<section id="foo">Foo</section>
B页:
<a href="/#foo">Go to foo</a>
每次我从 A 页面转到 B 页面并单击 link 时,屏幕都会转到上一个滚动位置而不是该部分。
我试图通过以下方式停用浏览器滚动历史记录功能:
useEffect(() => {
if (history.scrollRestoration) {
history.scrollRestoration = 'manual';
}
}, []);
我也尝试添加功能以转到所需的部分:
useEffect(() => {
if (window.location.hash) {
const anchor = document.querySelector(window.location.hash);
anchor.scrollIntoView();
}
}, []);
但是 none 这些解决方案有效。我在 Chrome 和 Firefox 上重现了相同的行为。
这是 Gatsby 的一个特性:它覆盖了浏览器默认的滚动历史记录行为。那里有更多信息 https://www.gatsbyjs.com/docs/how-to/routing/scroll-restoration/
我通过添加修复了它:
// gatsby-browser.js
exports.shouldUpdateScroll = ({
routerProps: { location },
getSavedScrollPosition,
}) => {
return location.href.indexOf("#") > -1 ? false : true;
};
在我的 React 应用程序上,我有两个页面:页面 A(主页)和页面 B。
在页面 B 上,我有 link 转到页面 A 的特定部分。
在页面 A 上:
<section id="foo">Foo</section>
B页:
<a href="/#foo">Go to foo</a>
每次我从 A 页面转到 B 页面并单击 link 时,屏幕都会转到上一个滚动位置而不是该部分。
我试图通过以下方式停用浏览器滚动历史记录功能:
useEffect(() => {
if (history.scrollRestoration) {
history.scrollRestoration = 'manual';
}
}, []);
我也尝试添加功能以转到所需的部分:
useEffect(() => {
if (window.location.hash) {
const anchor = document.querySelector(window.location.hash);
anchor.scrollIntoView();
}
}, []);
但是 none 这些解决方案有效。我在 Chrome 和 Firefox 上重现了相同的行为。
这是 Gatsby 的一个特性:它覆盖了浏览器默认的滚动历史记录行为。那里有更多信息 https://www.gatsbyjs.com/docs/how-to/routing/scroll-restoration/
我通过添加修复了它:
// gatsby-browser.js
exports.shouldUpdateScroll = ({
routerProps: { location },
getSavedScrollPosition,
}) => {
return location.href.indexOf("#") > -1 ? false : true;
};