スクロールに応じて、画像がふわっと拡大する | manasas ui sandbox
というのを実装してみた。GSAPは『知ってればすぐ実装できるが、情報にたどり着くまでに時間がかかる』ことが多いので、数こなしたら表現の幅が広がって楽しくなれそうだなあ、という印象。
実装は結構単純。Github
jsはこれだけ
import { gsap } from "gsap"; import { ScrollTrigger } from "gsap/ScrollTrigger"; gsap.registerPlugin(ScrollTrigger); gsap.fromTo( ".js-animation-section", { width: "25vw", height: "25vw", borderRadius: "50% 50% 50% 50%", }, { width: "100%", height: "100vh", borderRadius: "0%", scrollTrigger: { trigger: ".js-trigger", start: "center center", scrub: true, pin: true, // markers: true, }, }, );
htmlは実装に関わる部分はこのくらい
<div class="main-visual js-trigger"> <img class="main-image js-animation-section" src="https://source.unsplash.com/CakC6u4d95g/2400x2400" /> </div>
スクロール量にあわせて変化するscrub
というオプションを見つけるまで少しインターネットをさまよった。
あとは『大きさが変化する対象そのもの』ではなく、『変化後の大きさに合わせたWrapperコンポーネント』をtrigger
に指定するのがコツだろうか。
start
やscrub
は『trigger
に対しての位置/スクロール量』みたいな感じなので、trigger
の大きさ変更はバグの元になりやすそう。
markersをデプロイ時にコメントアウトしたり消したりが嫌なので、後でastroでdev/buildを見分ける方法探してデプロイ時には勝手に消える/dev起動中は出る、みたいにしておきたい。
おわり。