🙆
【GSAP】GSAP Practice【#28 GSAP Nextjs ScrollTrigger1】
【#28 GSAP Nextjs ScrollTrigger1】
YouTube: https://youtu.be/F-XwZnbCe-U
今回は、Nextjsで「ScrollTrigger」を
設定する方法について解説します。
app/page.tsx
'use client'
import { useRef, useState } from 'react'
import gsap from 'gsap'
import { useGSAP } from '@gsap/react'
import { ScrollTrigger } from 'gsap/ScrollTrigger'
gsap.registerPlugin(useGSAP)
interface BoxProps {
tl: gsap.core.Timeline | undefined
children: React.ReactNode
}
const Box = ({ tl, children }: BoxProps) => {
const boxRef = useRef<HTMLDivElement>(null)
useGSAP(() => {
tl &&
tl
.to(boxRef.current, {
x: 300,
})
.to(boxRef.current, {
rotate: 360,
})
}, [tl])
return (
<div
ref={boxRef}
className="w-40 h-40 bg-red-700 flex flex-col items-center justify-center text-white font-bold cursor-pointer"
>
{children}
</div>
)
}
export default function Home() {
const containerRef = useRef<HTMLDivElement>(null)
const [tl, setTl] = useState<gsap.core.Timeline>()
// const [reversed, setReverced] = useState(false)
useGSAP(() => {
gsap.registerPlugin(ScrollTrigger)
const tl = gsap.timeline({
scrollTrigger: {
trigger: containerRef.current,
markers: true,
start: 'top center',
end: 'bottom center',
scrub: true,
},
})
setTl(tl)
})
// const toggleTimeLine = contextSafe(() => {
// tl && tl.reversed(!tl.reversed())
// })
// useGSAP(() => {
// tl && tl.reversed(reversed)
// }, [reversed, tl])
return (
<main className="w-screen h-screen">
{/* <button onClick={() => setReverced(!reversed)}>toggle</button> */}
<div className="size-full flex items-center justify-center bg-rose-300"></div>
<div
ref={containerRef}
className="size-full flex flex-col gap-32 items-center justify-center bg-slate-300"
>
<Box tl={tl}>
<p>box1</p>
</Box>
<Box tl={tl}>
<p>box2</p>
</Box>
<Box tl={tl}>
<p>box3</p>
</Box>
</div>
<div className="size-full flex items-center justify-center bg-rose-300"></div>
<div className="size-full flex items-center justify-center bg-sky-300">
<h2 className="text-3xl font-bold">Section3</h2>
</div>
</main>
)
}
Discussion