Gatsby + GSAP 和 ScrollTrigger 使用<Link>时出现问题



我在Gatsby中遇到了一个奇怪的问题,只有当我想用gsap和scrolltrigger插件为元素设置动画时,才会出现这个问题。基本上,当我单击<Link>元素时,一切都很好,但在我添加了基于ScrollTrigger的代码gsap动画后(正常的gsap工作正常(,出现了问题,当我使用<Link>时,它不再正常工作。它将我重定向到正确的路径,但我只看到一张空白页。我需要刷新以查看该页面的实际内容。

基本上我想创建很酷的介绍动画。用户将看到100vh屏幕,其中有文本和堆叠的两个框(红色和黑色(,并且基于滚动位置,一个框将移动到侧面,另一个框移动到中心,并且用户将被重定向到"/什么";完成整个序列后的页面(我将使用navigation(((。

有人知道是什么原因导致了这个问题?我很乐意得到帮助,因为我陷入了困境…:/

import React from "react"
import { Helmet } from 'react-helmet'
import {useEffect, useRef} from "react"
import Layout from "../components/layout"
import viewStyles from "../components/modules/index.module.css"
import {gsap} from "gsap"
import {ScrollTrigger} from "gsap/ScrollTrigger"
import { navigate } from 'gatsby'
gsap.registerPlugin(ScrollTrigger);


// markup
const IndexPage = () => {

const redboxRef = useRef(null);
const blackboxRef = useRef(null);
const containerRef = useRef(null);
const textRef = useRef(null);
const circleRef = useRef(null);
useEffect(()=>{

const tl = gsap.timeline();
tl.to(redboxRef.current, {x: 1000, rotation: 100, scrollTrigger: {
trigger: containerRef.current,
start: "top top",
end:"+=1000",
scrub: 1.5,
pin: true,
}});

})

return (
<div id="container" ref = {containerRef}>
<Helmet>

<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;600;700;800;900&display=swap" rel="stylesheet"></link>
<link href="https://fonts.googleapis.com/css2?family=Jura:wght@300;400;500;600;700&display=swap" rel="stylesheet"></link>
</Helmet>
<Layout>
<div className={viewStyles.introwrapper}>

<div ref={textRef} className={viewStyles.leftside}>
<h1><span>zen</span>coded</h1>
<p>we code future</p>


</div>


<div className={viewStyles.rightside}>

<div className={viewStyles.boxwrapper}>
<div className={viewStyles.rbwrapper}>
<div ref={blackboxRef} className={viewStyles.blackbox}>

<svg ref={circleRef} className={viewStyles.circle} width="32px" height="32px" viewBox="0 0 106 106" version="1.1" xmlns="http://www.w3.org/2000/svg" >
<title>Circle</title>
<g id="Version4-12.11-(11-name-chose)" stroke="none" strokeWidth="1" fill="none" fillRule="evenodd">
<g id="Home-Copy-14" transform="translate(-862.000000, -346.000000)">
<g id="Circle" transform="translate(862.000000, 346.000000)">
<circle id="Oval-Copy" stroke="#FFFFFF" strokeWidth="0.2" cx="53" cy="53" r="52.9"></circle>
<circle id="Oval-Copy-2" stroke="#FFFFFF" strokeWidth="0.2" cx="52.5" cy="53.5" r="46.4"></circle>
<circle id="Oval-Copy-3" stroke="#FFFFFF" strokeWidth="0.2" cx="53" cy="53" r="39.9"></circle>
<circle id="Oval-Copy-4" stroke="#FFFFFF" strokeWidth="0.2" cx="53" cy="53" r="32.9"></circle>
<circle id="Oval-Copy-5" stroke="#FFFFFF" strokeWidth="0.2" cx="52.5" cy="53.5" r="26.4"></circle>
<circle id="Oval-Copy-6" stroke="#FFFFFF" strokeWidth="0.2" cx="53" cy="53" r="19.9"></circle>
<circle id="Oval-Copy-7" stroke="#FFFFFF" strokeWidth="0.2" cx="52.5" cy="53.5" r="13.4"></circle>
<circle id="Oval-Copy-8" stroke="#FFFFFF" strokeWidth="0.2" cx="52.5" cy="53.5" r="6.4"></circle>
<circle id="Oval-Copy-10" fill="#FFFFFF" cx="52.5" cy="53.5" r="1.5"></circle>
</g>
</g>
</g>
</svg>

</div>
<div ref={redboxRef} className={viewStyles.redbox}>
<ul>
<li ref={redboxRef} className={viewStyles.redboxtext}>ux</li>
<li className={viewStyles.redboxtext}>web</li>
<li className={viewStyles.redboxtext}>code</li>
</ul>
<a>more</a>

</div>

</div>

</div>


</div>

</div>
</Layout>

</div>
)
}
export default IndexPage

我搞定了!:(问题出现在这一行:

<div id="container" ref = {containerRef}>

我将该组件的maindiv视为容器,以便在scrollTrigger中定位它。它起了作用,但它也破坏了react/gatsby组件结构(我想:D(。我刚刚在它下面添加了另一个div,并添加了足够的ref,然后我瞄准了它,现在一切都很好。

总之,如果你想在使用gsap和scrollTrigger时瞄准100vh容器,就不要触摸顶部的lvldiv。:(

最新更新