ð Reactã§ã¹ã¯ããŒã«ã¢ãã¡ãŒã·ã§ã³äœã£ãŠã¿ã
å ¬é: 2025幎11æ22æ¥
WebããŒãžãã¹ã¯ããŒã«ããæã«ã
ãµãã£ãšåºãŠããã«ãŒã
ã¹ãŒããšäŒžã³ãã©ã€ã³
ã¹ãããããšã«åŒ·èª¿ããã説æ
ãããªâæ°æã¡ããåãâãèŠãããšãããŸãããã
React ã§ããFramer Motion ã䜿ãã°ãã¡ãç°¡åã«äœããŸãã
ãã®èšäºã§ã¯ã
ã·ã³ãã«ãªã¹ã¯ããŒã«ã¢ãã¡ãŒã·ã§ã³
ãŽãªãŽãªã®ã¿ã€ã ã©ã€ã³æŒåº
ãã®2ã€ã玹ä»ããŸãïŒ
ð ãŸãã¯ãã¢ãè§Šã£ãŠã¿ãã
åããèŠãã®ãäžçªæ©ãã§ãð
ãã¢ïŒVercelïŒ
https://react-animation-showcase-orcin.vercel.app
GitHub ãœãŒã¹ã³ãŒã
https://github.com/Kazuya-Sakashita/react-animation-showcase
âš ã¹ã¯ããŒã«ã¢ãã¡ãŒã·ã§ã³ã£ãŠäœãè¯ãã®ïŒ
èªã¿ããã
ã³ã³ãã³ããèªç¶ã«å ¥ã£ãŠãã
âã¡ãããšäœãããæâãåºã
LPããµãŒãã¹ç޹ä»ããŒãžãšçžæ§æçŸ€
ãã æç« ã䞊ã¹ãã ãã®ããŒãžãããèªã¿é²ããããªãUIã«ãªããŸãã
ðš 1. ã·ã³ãã«çïŒã¹ã¯ããŒã«ã§âãµãã£ãšè¡šç€ºâ
Framer Motion ã® whileInView ã䜿ããšã
ãã¡ãç°¡åã«ãã¹ã¯ããŒã«ããŠèŠãããã¢ãã¡ãŒã·ã§ã³ããäœããŸãã
<motion.div
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, amount: 0.4 }}
transition={{ duration: 0.6, ease: "easeOut" }}
>
ã·ã³ãã«çïœã¹ã¯ããŒã«ã§ãµãã£ãšåºãŠããã
</motion.div>
ããã ãã§å®æïŒ
æåã¯éæïŒå°ãäžã«
èŠããç¬éãµãã£ãšç»å Ž
once ã§1åã®ã¿åç
ããŒãžã«æ°æã¡è¯ãåãã远å ã§ããŸãã
ð¥ 2. ãŽãªãŽãªçïŒã¿ã€ã ã©ã€ã³UIïŒé²è¡ã㌠+ Stepã«ãŒãïŒ
ãã¢ã§ã䜿ã£ãŠãããã¿ã€ã ã©ã€ã³åŒãã®æŽŸæãªã¹ã¯ããŒã«ã¢ãã¡ãŒã·ã§ã³ã
å·Šã«é²è¡ããŒïŒã¹ã¯ããŒã«éã§äŒžã³ãïŒ
å³ã« Step ã«ãŒãïŒé çªã«ã¢ãã¡ãŒã·ã§ã³ïŒ
const { scrollYProgress } = useScroll();
const height = useTransform(scrollYProgress, [0, 1], ["0%", "100%"]);
<motion.div
style={{ height }}
className="w-[4px] bg-blue-500 rounded-full fixed left-6 top-20"
/>
ã¹ã¯ããŒã«äœçœ®ã0â1ã§åãåã£ãŠã
ãã®ãŸãŸé«ãã«å€æããã ãã®ã·ã³ãã«ãªä»çµã¿ã§ãã
<motion.div
initial={{ opacity: 0, scale: 0.9, x: 20 }}
whileInView={{ opacity: 1, scale: 1, x: 0 }}
transition={{ duration: 0.6, ease: "easeOut" }}
viewport={{ once: false, amount: 0.5 }}
className="p-6 bg-white rounded-lg shadow-md"
>
<h3 className="font-bold">Step 1</h3>
<p className="text-slate-600">ãããªæãã§åºãŠããŸãã</p>
</motion.div>
ãã§ãŒãã€ã³
æ¡å€§
ã¹ã©ã€ã
ããããå
šéšãŸãšããŠãã£ãŠãããã®ã§ã
ãé çªã«èªãŸãã UIãããã¡ãç°¡åã
ð ããããã€ãŸãããã€ã³ã
芪ã overflow: hidden
芪㫠transform ãããã£ãŠãã
amount ãå°ãããã
ç£èŠå¯Ÿè±¡ãéã
fixedèŠçŽ ã« height ã style ã§æž¡ããŠããªã
ãã®èšäºã®ãã¢ã¯ãã®èŸºãå šéšã¯ãªã¢ããŠãŸãã
ð åèãªã³ã¯
Framer MotionïŒuseScroll
https://www.framer.com/motion/use-scroll/
Framer MotionïŒscroll animations
https://www.framer.com/motion/scroll-animations/
Intersection Observer (åºç€ç¥è)
https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
ðŠ ã㢠& ãœãŒã¹
ãã¢
https://react-animation-showcase-orcin.vercel.app/scroll
GitHub ãªããžããª
https://github.com/Kazuya-Sakashita/react-animation-showcase
ð ãŸãšã
ã¹ã¯ããŒã«ã¢ãã¡ãŒã·ã§ã³ã¯âèªã¿ããããŠæ°æã¡è¯ãâããŒãžãäœãã
Framer Motion ãªããåçŽè ã§ãããå®è£ ã§ãã
ãµãã£ãšè¡šç€º â ã¿ã€ã ã©ã€ã³æŒåºãŸã§äœãã
ãã¢ã¯å šãŠå ¬éããŠããã®ã§èªç±ã«è§Šã£ãŠãã ããð

転è·ããŠ1ãæã®æ¯ãè¿ã
ã12ç« ããªãªãžãã«ã¢ããªå¶äœã®æ¯ãè¿ã
AIã§çè§£ãäœãåŠã³æ¹âïž ããããªãåèªã ããã§ãåã«é²ãããã®æèãããŒ
12ç« ãªãªãžãã«ã¢ããªå¶äœãçµã㊠(WEBã¢ããªéçºã®ã³ããæŽã¿ããããããªæ°ããã)
ã1ç« ãäºåæºåã®æ¯ãè¿ã
ã2ç« ãWebã¢ããªã±ãŒã·ã§ã³æŠèŠã®æ¯ãè¿ã