ã¯ããã«
ä»åã®èšäºã§ã¯ãGSAP3ãšScrollTriggerãçšããŠãã¹ã¯ããŒã«ã«åãããã³ã³ãã³ãã®é·ç§»ã¢ãã¡ãŒã·ã§ã³ãã©ã®ããã«å®è£ ãããã解説ããŸããã¢ãã¡ãŒã·ã§ã³ã¯ãç»é¢å šäœãèŠãã»ã¯ã·ã§ã³ã«é 眮ãããè€æ°ã®ã.boxãèŠçŽ ããã¹ã¯ããŒã«é²è¡ã«åãããŠæšªã«ç§»åããå転ãããšããæµãã«ãªã£ãŠããŸããããã«ãããåãã®ããã€ã³ã¿ã©ã¯ãã£ããªãã¶ã€ã³ãæè»œã«å®çŸã§ããŸã[1]ã
See the Pen Untitled by Yushi Yamamoto (@yamamotoyushi) on CodePen.
HTMLã®æ§é
ä»åã®ã³ãŒãã§ã¯ãHTMLã®åºæ¬æ§é ãšããŠä»¥äžã®ãããªã»ã¯ã·ã§ã³ãå®çŸ©ãããŠããŸãã
<section class="trigger">
<span class="down">äž<br />â</span>
<span class="up">â<br />äž</span>
<div class="box"></div>
<div class="box"></div>
<!-- è€æ°ã®.boxèŠçŽ ã䞊㶠-->
...
</section>
-
ã»ã¯ã·ã§ã³èŠçŽ ïŒ.triggerïŒ
ãã®ã»ã¯ã·ã§ã³ã¯ãã¢ãã¡ãŒã·ã§ã³ã®ããªã¬ãŒãšãªãé åã§ããã¹ã¯ããŒã«æã«ãã³çããããã¢ãã¡ãŒã·ã§ã³ãåæããŠé²è¡ããŸãã -
ããã²ãŒã·ã§ã³çšã®ã¹ãã³èŠçŽ
å·Šå³ã«é 眮ããããäžãããäžãã®ããã¹ãã¯ããŠãŒã¶ãŒã«ã¹ã¯ããŒã«æ¹åãæäœã®ãã³ããäžããããã®ãã®ã§ãã -
ã¢ãã¡ãŒã·ã§ã³å¯Ÿè±¡ã®.boxèŠçŽ
è€æ°ã®.boxèŠçŽ ã¯ãCSSã§çްãã©ã€ã³ç¶ã«ã¹ã¿ã€ã«ãåœãŠãããŠãããåŸè¿°ããGSAPã®ã¿ã€ã ã©ã€ã³ã«ãã£ãŠããããåããä»ããããŠããŸãã
CSSã«ããã¹ã¿ã€ã«èšå®
CSSã§ã¯ãç»é¢å šäœã®ãã¶ã€ã³ãåèŠçŽ ã®é 眮ããµã€ãºãå®çŸ©ãããŠããŸãã以äžã«äž»ãªéšåã説æããŸãã
body {
--light: #eee;
--dark: #161616;
}
section {
width: 100vw;
height: 100vh;
overflow: hidden;
background: var(--light);
}
span {
position: absolute;
display: block;
text-align: center;
font-size: 50px;
z-index: 2;
width: 50%;
text-transform: uppercase;
font-weight: 900;
color: var(--light);
top: calc(50vh - 56px);
}
span.up {
right: 0;
}
span.down {
left: 0;
}
.box {
height: 1.2vh;
width: 50vw;
margin-bottom: -0.2vh;
background: var(--dark);
display: block;
}
-
ããã£ããã³ã»ã¯ã·ã§ã³ã®ã¹ã¿ã€ã«
ã»ã¯ã·ã§ã³ã¯ç»é¢å šäœïŒ100vw à 100vhïŒãå ãããªãŒããŒãããŒãé ãããèšå®ã«ãªã£ãŠããŸããèæ¯ã¯æããè²ïŒã©ã€ãã«ã©ãŒïŒã«çµ±äžãããå šäœã®é°å²æ°ãæŽããŸãã -
ã¹ãã³èŠçŽ ã®ã¹ã¿ã€ã«
ããã¹ãã¯å€§ããªãã©ã³ããµã€ãºã§äžå€®ã«é 眮ãããå·Šå³ã«é 眮ããããã«left
ãšright
ããããã£ã䜿ãããŠããŸããããã«ãããèŠèŠçãªããã²ãŒã·ã§ã³ãåããããããªããŸãã -
.boxèŠçŽ ã®ã¹ã¿ã€ã«
å.boxã¯æšªå¹ 50vwãéåžžã«èãé«ãïŒ1.2vhïŒã«èšå®ããããã€ãã¹ããŒãžã³ã§åŸ®åŠã«éãªãåããããªã¬ã€ã¢ãŠãã«ãªã£ãŠããŸããèæ¯ã«ã¯æ¿ãè²ïŒããŒã¯ã«ã©ãŒïŒã䜿ãããã¢ãã¡ãŒã·ã§ã³äžã®åããã¯ã£ãããšèŠèªã§ããããã«ãªã£ãŠããŸã[2]ã
GSAPã«ããã¢ãã¡ãŒã·ã§ã³ãšScrollTriggerã®é£æº
GSAPã®ã¿ã€ã ã©ã€ã³ã䜿çšããããšã§ãè€æ°ã®ã¢ãã¡ãŒã·ã§ã³ãäžã€ã®ã·ãŒã±ã³ã¹ã«ãŸãšããã¹ã¯ããŒã«ã«é£åããŠåçããä»çµã¿ãå®è£ ãããŠããŸããã³ãŒãã¯ä»¥äžã®éãã§ãã
gsap.timeline({
scrollTrigger: {
trigger: ".trigger",
scrub: 0.5,
pin: true,
start: "top top",
end: "+=150%"
}
})
.to(".box", {
force3D: true,
duration: 1,
xPercent: 100,
ease: "power1.inOut",
stagger: { amount: 1 }
})
.to(".box", { ease: "power1.out", duration: 1, rotation: "45deg" }, 0)
.to(".box", { ease: "power1.in", duration: 1, rotation: "0deg" }, 1);
-
ScrollTriggerã®èšå®
ã¿ã€ã ã©ã€ã³ã®scrollTrigger
ãªãã·ã§ã³ã§ã¯ãã¢ãã¡ãŒã·ã§ã³ã®éå§ã»çµäºäœçœ®ãã¹ã¯ããŒã«ã«é£åããé²è¡å ·åãèšå®ããŠããŸãã-
trigger: ".trigger"
察象ãšãªãã»ã¯ã·ã§ã³å šäœãããªã¬ãŒã«èšå®ããŸãã -
pin: true
ã¢ãã¡ãŒã·ã§ã³äžã¯ã»ã¯ã·ã§ã³ãåºå®ãããã¹ã¯ããŒã«ããŠãäœçœ®ãå€ãããªãããã«ããŸãã -
scrub: 0.5
ã¹ã¯ããŒã«äœçœ®ã«åãããŠã¢ãã¡ãŒã·ã§ã³ã®é²è¡ãæ»ããã«é£åããã0.5ç§ã»ã©ã®é å»¶ãä»ããŠããŸãã -
start: "top top"
ãšend: "+=150%"
ã¹ã¯ããŒã«ã®å§ç¹ãšçµç¹ãç»é¢äžéšã«å¯ŸããŠèšå®ããçžŠå¹ ã®150%åã«ããã£ãŠã¢ãã¡ãŒã·ã§ã³ãå±éãããä»çµã¿ãšãªã£ãŠããŸã[3]ã
-
-
ã¿ã€ã ã©ã€ã³ã®ã¢ãã¡ãŒã·ã§ã³è©³çް
ã¿ã€ã ã©ã€ã³ã¯è€æ°ã®ã¢ãã¡ãŒã·ã§ã³ãé£ç¶ããŠå®çŸ©ããŠããŸãã-
暪æ¹åã®ç§»å
1ã€ç®ã®.to()
ã¡ãœããã§ã¯ãå.boxèŠçŽ ãæ°Žå¹³æ¹åã«100%ç§»åãããŸããxPercent: 100
ã«ãããããã¯ã¹ã®å¹ åã ãå³ãžãããããŸããstagger
ãªãã·ã§ã³ã䜿çšããããšã§ãåèŠçŽ ã®ã¢ãã¡ãŒã·ã§ã³éå§ã¿ã€ãã³ã°ããããããé£ç¶çãªæµããå®çŸããŠããŸãã
ãŸããforce3D: true
ã§ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãå©çšããããã©ãŒãã³ã¹ã®åäžãçã£ãŠããŸã[4]ã -
å転ã¢ãã¡ãŒã·ã§ã³
2ã€ç®ã®.to()
ã¡ãœããã¯ãåæã«å.boxã45床å転ãããåŠçã§ãããã®ã¢ãã¡ãŒã·ã§ã³ã¯ã¿ã€ã ã©ã€ã³ã®éå§æïŒã¿ã€ã 0ïŒã«èšå®ãããŠããŸãã
ããã«3ã€ç®ã®ã¢ãã¡ãŒã·ã§ã³ã§ã¯ãæé軞äž1ç§ç®ããåã³å.boxã®å転ã0åºŠã«æ»ããå ã®ç¶æ ãžãšãªã»ããããåããäžããŠããŸãã
ããã«ãããã¹ã¯ããŒã«ã®åãã«åãããŠæ»ããã«ç§»åãšå転ã®ãã©ã³ãžã·ã§ã³ãçºçãããã¶ã€ã³ãšãªããŸã[5]ã
-
ãããã«
ä»åã®è§£èª¬ã§ã¯ãGSAP3ãšScrollTriggerãçµã¿åãããããšã§ãã¹ã¯ããŒã«ã«é£åããã³ã³ãã³ãã®é·ç§»ã¢ãã¡ãŒã·ã§ã³ãã©ã®ããã«å®è£ ã§ãããã玹ä»ããŸãããHTMLã§èŠçŽ ã䞊ã¹ãCSSã§ã¬ã€ã¢ãŠããšã¹ã¿ã€ã«ãæŽããåŸãGSAPã®ã¿ã€ã ã©ã€ã³ã§è€æ°ã®ã¢ãã¡ãŒã·ã§ã³ã¹ããããå®çŸ©ããããšã§ãåãã®ããã€ã³ã¿ã©ã¯ãã£ããªç»é¢è¡šçŸãå®çŸã§ããŸãããããã®æè¡ã掻çšããããšã§ãããé åçãªãŠãŒã¶ãŒäœéšãæäŸãããŠã§ããµã€ãå¶äœãå¯èœã«ãªããŸã[6]ã
以äžã®ããã«ãGSAPãšScrollTriggerã¯èšå®ãã·ã³ãã«ã§ãããªããéåžžã«åŒ·åãªããŒã«ã§ãããã²èªåã®ãããžã§ã¯ãã§å®éšããŠãããªãç¬èªã®ãã€ãããã¯ãªè¡šçŸã远æ±ããŠãã ããã
Citations:
[1] https://tympanus.net/codrops/2019/11/14/the-new-features-of-gsap-3/
[2] https://gsap.com/docs/v3/Plugins/ScrollTrigger/
See the Pen Untitled by Yushi Yamamoto (@yamamotoyushi) on CodePen.