gasp使い方
とりあえずざっくりコード
import {gsap} from "gsap"; import { useEffect, useRef } from "react"; import ScrollTrigger from "gsap/src/ScrollTrigger"; /** @jsImportSource @emotion/react */ import { css} from "@emotion/react"; export default function Top() { useEffect(() => { gsap.registerPlugin(ScrollTrigger); // 各画像要素のアニメーション const scrollphotos = gsap.utils.toArray(".scrollphoto"); scrollphotos.forEach((el) => { const tl = gsap.timeline(); ScrollTrigger.create({ trigger:el, start: "top center", end: "bottom center", once: true, onEnter: () => { const h3element = el.querySelector('.scrollphoto-title'); gsap.fromTo(h3element, {width:"0", overflowX: "hidden"}, {width:"200px", delay:1.5, duration:2}); popup(el); } }); function popup(el) { tl.fromTo(el, {x:-1000, autoAlpha:0}, {x:0, ease:"boue.inOut", duratioin:1.5, autoAlpha:1}) } }, []); const tl2 = gsap.timeline(); tl2.to('.my-element2 span', {x:100, ease:"bouce.out", fontSize:'2.5em', duration:2}) }); return ( <div css={wrapBox}> <div className="my-elemtent2" css={fontBox}> <span>Hello,world</span> </div> <div className="scrollphoto" css={scrollphoto}> <h3 className="scrollphoto-title" css={photoTitle}>Photo1</h3> <img src="images/card-1.webp" alt="" /> </div> <div className="scrollphoto" css={scrollphoto}> <h3 className="scrollphoto-title" css={photoTitle}>Photo2</h3> <img src="images/card-2.webp" alt="" /> </div> <div className="scrollphoto" css={scrollphoto}> <h3 className="scrollphoto-title" css={photoTitle}>Photo3</h3> <img src="images/card-3.webp" alt="" /> </div> </div> ) }