我正在使用Framer Motion为Next.js页面过渡设置动画。但是,使用使用AnimatePresence会破坏hash
链接导航,并且页面不再转到目标id
元素。
页面转换是完美的,直到您想要导航到页面上的苛刻 ID :(
// I have a link component setup like this
// index.tsx
<Link href="/about#the-team" scroll={false}>
<a>The Team</a>
</Link>
// Targeting another page `about.tsx` with the id
// about.tsx
{/* ...many sections before.. */}
<section id="the-team">{content}</section>
我有一个_app.tsx
如下所示的自定义。
// _app.tsx
import { AppProps } from 'next/app';
import { useRouter } from 'next/router';
import { AnimatePresence } from 'framer-motion';
const MyApp = ({ Component, pageProps }: AppProps): JSX.Element => {
const router = useRouter();
return (
<AnimatePresence exitBeforeEnter>
<Component {...pageProps} key={router.route} />
</AnimatePresence>
);
};
export default MyApp;
我希望直接进入该部分,id="the-team"
但它不起作用。使用哈希链接刷新页面显示它最初位于目标元素但很快跳转到顶部。它是如此快速和容易错过。如何保留页面转换但仍然能够导航到哈希 id?