源码 · page.tsx

// page.tsx
'use client'

import { useGSAP } from '@gsap/react'
import { gsap } from 'gsap'
import { ScrollTrigger } from 'gsap/ScrollTrigger'
import { data } from '../const'
import Image from 'next/image'
import { useRef } from 'react'

gsap.registerPlugin(ScrollTrigger)

const Page = () => {
  const containerRef = useRef<HTMLDivElement>(null)

  useGSAP(() => {
    const t1 = gsap.timeline({
      scrollTrigger: {
        trigger: containerRef.current,
        markers: true,
        start: 'center bottom',
        end: 'top top',
        scrub: 1,
        toggleActions: 'play none none reverse'
      }
    })

    t1.to(containerRef.current, {
      right: '0'
    })
  })

  return (
    <div className="h-[250vh] overflow-x-hidden">
      {}
      
      <div className="flex-center h-[80vh] text-2xl font-bold">向下翻页</div>
      <div className="relative mx-auto w-[1280px]">
        <div ref={containerRef} className="absolute flex w-[2000px] gap-4">
          {data.map((item) => (
            <div key={item.url} className="relative h-100 w-100" style={{ width: item.w, height: item.h }}>
              <Image unoptimized src={item.url} alt="image" fill sizes="100vw" className="rounded-md object-cover" />
            </div>
          ))}
        </div>
      </div>
    </div>
  )
}

export default Page
向下滚动
image
image
image
image