CSS Animation Rangeã§ã¹ã¯ããŒã«ããŒã¹ã¢ãã¡ãŒã·ã§ã³ã®å¯èœæ§ãè§£ãæŸã¡ãŸããããã¹ã¯ããŒã«äœçœ®ã«åå¿ãããé åçã§ã€ã³ã¿ã©ã¯ãã£ããªãŠãŒã¶ãŒäœéšã®äœãæ¹ãåŠã³ãŸãã
CSS Animation Rangeããã¹ã¿ãŒããïŒã¢ãã³Webãã¶ã€ã³ã®ããã®ã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³å¶åŸ¡
Webéçºã®ãã€ãããã¯ãªäžçã§ã¯ãé åçã§ã€ã³ã¿ã©ã¯ãã£ããªãŠãŒã¶ãŒäœéšãäœãåºãããšãæãéèŠã§ããåŸæ¥ã®CSSã¢ãã¡ãŒã·ã§ã³ã¯åŒ·åã§ãããã®ã®ããããŒãã¯ãªãã¯ãªã©ã®ã€ãã³ãã«äŸåããããšãå€ãã§ããããããæ°ããªãã©ãã€ã ãç»å ŽããŸããããããã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ã§ãããã®æè¡ã¯ã¢ãã¡ãŒã·ã§ã³ããŠãŒã¶ãŒã®ã¹ã¯ããŒã«äœçœ®ã«çµã³ã€ããããæ²¡å ¥æã®ããçŽæçãªãã©ãŠãžã³ã°äœéšãçã¿åºããŸããCSS Animation Rangeã¯ããã®é©åœã®æåç·ã«ãããŸãã
CSS Animation Rangeãšã¯ïŒ
CSS Animation Rangeã¯ãCSS Scroll Timelineã®ææ¡ã«å«ãŸããæè¡ïŒãŸãã¯ãããåºç¯ãªãã©ãŠã¶ãµããŒãã®ããã®JavaScriptã©ã€ãã©ãªïŒãçšããŠå®çŸãããããšãå€ããæå®ãããã³ã³ããå ã§ã®ãŠãŒã¶ãŒã®ã¹ã¯ããŒã«äœçœ®ã«åºã¥ããŠã¢ãã¡ãŒã·ã§ã³ã®é²è¡ãæ£ç¢ºã«å¶åŸ¡ããããšãã§ããŸããèŠçŽ ããã¥ãŒããŒãã«å ¥ããšãã§ãŒãã€ã³ããããããŒãžãäžã«ã¹ã¯ããŒã«ããã«ã€ããŠããã°ã¬ã¹ããŒãæºããããŠããæ§åãæ³åããŠã¿ãŠãã ããããããã¯ã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ã§å¯èœãªããšã®ã»ãã®äžäŸã«ãããŸããã
ã¢ãã¡ãŒã·ã§ã³ãã€ãã³ãã«åºã¥ããŠããªã¬ãŒãããã®ã§ã¯ãªããã¹ã¯ããŒã«ã®é²è¡ç¶æ³ã«çŽæ¥ãããã³ã°ãããŸããããã«ããããŠã§ããµã€ãã®ã¹ããŒãªãŒããªã³ã°ã匷åãããŠãŒã¶ãŒã®æ³šæãèªå°ããæèã«å¿ãããã£ãŒãããã¯ãæäŸãããªã©ãåµé çãªå¯èœæ§ã倧ããåºãããŸãã
ã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ã®å©ç¹
- ãŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ãã®åäžïŒ ã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒã®æ³šæãåŒãã€ããã³ã³ãã³ããããã«æ¢çŽ¢ããããä¿ããŸããã€ã³ã¿ã©ã¯ã·ã§ã³ããããã€ãããã¯ã«ããããšã§ãããèšæ¶ã«æ®ããé åçãªäœéšãçã¿åºãããšãã§ããŸãã
- ã¹ããŒãªãŒããªã³ã°ã®æ¹åïŒ èŠçŽ ãã¢ãã¡ãŒã·ã§ã³åããŠãã³ã³ãã³ããé£ç¶çãã€èŠèŠçã«é åçãªæ¹æ³ã§è¡šç€ºãããŠã§ããµã€ãã®ç©èªã®æµãã匷åããŸãããŠãŒã¶ãŒãã¹ã¯ããŒã«ããã«ã€ããŠå±éããã€ã³ã¿ã©ã¯ãã£ããªã¿ã€ã ã©ã€ã³ãã¢ãã¡ãŒã·ã§ã³åãããã€ã³ãã©ã°ã©ãã£ãã¯ãèããŠã¿ãŠãã ããã
- æèã«å¿ãããã£ãŒãããã¯ïŒ ãŠãŒã¶ãŒã®ããŒãžäžã®äœçœ®ã«åºã¥ããŠèŠèŠçãªåå³ããã£ãŒãããã¯ãæäŸããŸããäŸãã°ããŠãŒã¶ãŒã察å¿ããã»ã¯ã·ã§ã³ãŸã§ã¹ã¯ããŒã«ãããšãã«ããã²ãŒã·ã§ã³é ç®ããã€ã©ã€ããããªã©ã§ãã
- ããã©ãŒãã³ã¹ã®æé©åïŒ æ£ããå®è£ ãããã°ãã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ã¯ããã©ãŠã¶ã®ãã€ãã£ããªã¹ã¯ããŒã«æ©èœã掻çšã§ãããããåŸæ¥ã®JavaScriptããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ãããããã©ãŒãã³ã¹ãé«ããªãå¯èœæ§ããããŸãã
- é²è¡ç¶æ³ã®è¡šç€ºïŒ ããã°ã¬ã¹ããŒããã®ä»ã®ã€ã³ãžã±ãŒã¿ã衚瀺ããŠãã³ã³ãã³ããéããŠã®ãŠãŒã¶ãŒã®é²è¡ç¶æ³ãèŠèŠçã«è¡šçŸããçŸåšäœçœ®ã®ææ¡ãšããã²ãŒã·ã§ã³ãåäžãããŸãã
- ã¢ã¯ã»ã·ããªãã£ãžã®é æ ®ïŒ ãŠãŒã¶ãŒèšå®ïŒäŸïŒã¢ãã¡ãŒã·ã§ã³ãç¡å¹ã«ãããªãã·ã§ã³ããŠãŒã¶ãŒã«æäŸããïŒãé©åã«å®è£ ã»èæ ®ããããšã§ãã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ã¯ããåºç¯ãªãªãŒãã£ãšã³ã¹ã«ã¢ã¯ã»ã¹å¯èœã«ãªããŸããã¢ãã¡ãŒã·ã§ã³ã奜ãŸãªããŠãŒã¶ãŒã®ããã«ã代æ¿ã®ããã²ãŒã·ã§ã³ãå¶åŸ¡ãªãã·ã§ã³ãæäŸããŠãã ããã
ã³ã¢ã³ã³ã»ããã®çè§£
ãã€ãã£ãã®CSS Scroll Timelineã®ãµããŒãã¯ãŸã é²åã®éäžã§ãããããªãã£ã«ãJavaScriptã©ã€ãã©ãªããŸãã¯å®éšçãªCSSæ©èœã®ãããã䜿çšããŠãããã«é¢ããããåºæ¬çãªæŠå¿µã¯åãã§ãããããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- ã¹ã¯ããŒã«ã³ã³ããïŒ ã¢ãã¡ãŒã·ã§ã³ãé§åããã¹ã¯ããŒã«äœçœ®ãæã€èŠçŽ ã§ãããŠãŒã¶ãŒãã¹ã¯ããŒã«ããã³ã³ãããã®ãã®ã§ãã
- ã¢ãã¡ãŒã·ã§ã³åãããèŠçŽ ïŒ ã¹ã¯ããŒã«ã³ã³ããå ã®ã¹ã¯ããŒã«äœçœ®ã«åºã¥ããŠã¢ãã¡ãŒã·ã§ã³åãããèŠçŽ ã§ãã
- ã¢ãã¡ãŒã·ã§ã³ã¿ã€ã ã©ã€ã³ïŒ ã¹ã¯ããŒã«äœçœ®ãšã¢ãã¡ãŒã·ã§ã³ã®é²è¡ç¶æ³ãšã®é¢ä¿ãå®çŸ©ããŸããéåžžãããã¯ç·åœ¢ãããã³ã°ã§ãããããè€éãªã«ãŒããå¯èœã§ãã
- éå§ç¹ãšçµäºç¹ïŒ ã¢ãã¡ãŒã·ã§ã³ãéå§ããã³çµäºããã¹ã¯ããŒã«äœçœ®ãå®çŸ©ããŸããããã¯å€ãã®å Žåãæ£ããå®çŸ©ããããã®éèŠãªéšåã§ããèŠçŽ ããã¥ãŒããŒãã«å ¥ã£ããšãã«ã¢ãã¡ãŒã·ã§ã³ãéå§ãããã§ããããããšãèŠçŽ ã®äžéšããã¥ãŒããŒãã®äžéšã«éãããšãã«éå§ãããã§ããïŒ
- ã¢ãã¡ãŒã·ã§ã³ããããã£ïŒ ã¢ãã¡ãŒã·ã§ã³ããããæšæºçãªCSSã¢ãã¡ãŒã·ã§ã³ããããã£ïŒäŸïŒ`transform`ã`opacity`ã`scale`ã`rotate`ïŒã§ãã
ã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ã®å®è£ ïŒJavaScriptãã©ãŒã«ããã¯ä»ãïŒ
CSS Scroll Timelineã¯ãŸã åºããµããŒããããŠããªããããããã§ã¯ããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãæŠç¥ãçšããJavaScriptããŒã¹ã®ã¢ãããŒãã«çŠç¹ãåœãŠãŸããããã«ãããå¯èœãªéãCSSã¢ãã¡ãŒã·ã§ã³ã掻çšãã€ã€ãããåºç¯ãªãã©ãŠã¶äºææ§ã確ä¿ããŸãã
ã¹ããã1ïŒHTMLæ§é ã®ã»ããã¢ãã
ãŸããåºæ¬çãªHTMLæ§é ãäœæããŸããããããã«ã¯ãã¹ã¯ããŒã«å¯èœãªã³ã³ãããšã¢ãã¡ãŒã·ã§ã³ããããèŠçŽ ãå«ãŸããŸãã
<div class="scroll-container">
<div class="animated-element">
<h2>Animate Me!</h2>
</div>
<div class="content">
<p>Lots of content here to make the container scrollable...</p>
<!-- More content -->
</div>
</div>
ã¹ããã2ïŒCSSã¹ã¿ã€ã«ã®è¿œå
次ã«ãã¬ã€ã¢ãŠããšã¢ãã¡ãŒã·ã§ã³ã®åæç¶æ ãå®çŸ©ããããã«ãããã€ãã®CSSã¹ã¿ã€ã«ã远å ããŸãããã
.scroll-container {
height: 500px; /* Adjust as needed */
overflow-y: scroll;
position: relative;
}
.animated-element {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
opacity: 0; /* Initially hidden */
transition: opacity 0.5s ease;
}
.animated-element.active {
opacity: 1; /* Visible when active */
}
.content {
padding: 20px;
}
ã¹ããã3ïŒJavaScriptããžãã¯ã®å®è£
ãããéæ³ã®èµ·ããå Žæã§ããJavaScriptã䜿çšããŠãã¢ãã¡ãŒã·ã§ã³åãããèŠçŽ ããã¥ãŒããŒãå ã«ãããã©ãããæ€åºãããactiveãã¯ã©ã¹ã远å ããŠã¢ãã¡ãŒã·ã§ã³ãããªã¬ãŒããŸãã
const scrollContainer = document.querySelector('.scroll-container');
const animatedElement = document.querySelector('.animated-element');
function isInViewport(element) {
const rect = element.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
);
}
function handleScroll() {
if (isInViewport(animatedElement)) {
animatedElement.classList.add('active');
} else {
animatedElement.classList.remove('active');
}
}
scrollContainer.addEventListener('scroll', handleScroll);
// Initial check on page load
handleScroll();
ã¹ããã4ïŒã¢ãã¡ãŒã·ã§ã³ã®åŸ®èª¿æŽ
CSSã®transitionã倿Žããããããè€éãªå€åœ¢ã远å ãããããããšã§ãã¢ãã¡ãŒã·ã§ã³ãã«ã¹ã¿ãã€ãºã§ããŸããäŸãã°ãã¹ã±ãŒã«ã¢ãã¡ãŒã·ã§ã³ã远å ããããšãã§ããŸãïŒ
.animated-element {
/* ... other styles ... */
transform: translate(-50%, -50%) scale(0.5);
transition: opacity 0.5s ease, transform 0.5s ease;
}
.animated-element.active {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
}
é«åºŠãªãã¯ããã¯ãšèæ ®äºé
Intersection Observer APIã®äœ¿çš
Intersection Observer APIã¯ãèŠçŽ ããã¥ãŒããŒãå ã«ãããã©ãããæ€åºããããã®ãããå¹ççã§ããã©ãŒãã³ã¹ã®é«ãæ¹æ³ã§ããèŠçŽ ãæå®ãããç¥å èŠçŽ ãŸãã¯ããã¥ã¡ã³ãã®ãã¥ãŒããŒããšäº€å·®ãããšãã«ãéåæã§éç¥ãæäŸããŸãã
const animatedElement = document.querySelector('.animated-element');
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.isIntersecting) {
animatedElement.classList.add('active');
} else {
animatedElement.classList.remove('active');
}
});
});
observer.observe(animatedElement);
ã¹ã¯ããŒã«é²è¡ç¶æ³ãšã¢ãã¡ãŒã·ã§ã³é²è¡ç¶æ³ã®ãããã³ã°
ãããã现ããªå¶åŸ¡ã®ããã«ãã¹ã¯ããŒã«ã®é²è¡ç¶æ³ãã¢ãã¡ãŒã·ã§ã³ã®é²è¡ç¶æ³ã«çŽæ¥ãããã³ã°ããããšãã§ããŸããããã«ããããŠãŒã¶ãŒã®ã¹ã¯ããŒã«äœçœ®ã«æ£ç¢ºã«åå¿ããã¢ãã¡ãŒã·ã§ã³ãäœæã§ããŸãã
const scrollContainer = document.querySelector('.scroll-container');
const animatedElement = document.querySelector('.animated-element');
scrollContainer.addEventListener('scroll', () => {
const scrollHeight = scrollContainer.scrollHeight - scrollContainer.clientHeight;
const scrollPosition = scrollContainer.scrollTop;
const scrollPercentage = scrollPosition / scrollHeight;
// Map scroll percentage to animation progress (0 to 1)
const animationProgress = scrollPercentage;
// Apply the animation based on the progress
animatedElement.style.transform = `translateX(${animationProgress * 100}px)`;
animatedElement.style.opacity = animationProgress;
});
ãããŠã³ã¹ãšã¹ããããªã³ã°
ããã©ãŒãã³ã¹ãåäžããããããç¹ã«è€éãªã¢ãã¡ãŒã·ã§ã³ã§ã¯ããããŠã³ã¹ãã¹ããããªã³ã°æè¡ã䜿çšããŠã¹ã¯ããŒã«ã€ãã³ããã³ãã©ã®å®è¡é »åºŠãå¶éããããšãæ€èšããŠãã ããã
function debounce(func, delay) {
let timeout;
return function(...args) {
const context = this;
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(context, args), delay);
};
}
const scrollContainer = document.querySelector('.scroll-container');
const animatedElement = document.querySelector('.animated-element');
const handleScroll = () => {
// ... animation logic ...
};
scrollContainer.addEventListener('scroll', debounce(handleScroll, 20));
CSS Scroll TimelineïŒå®éšçæ©èœïŒ
ãŸã åºããµããŒããããŠããŸããããCSS Scroll Timelineã¯CSSã®ã¿ã䜿çšããŠã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ãäœæãããã€ãã£ããªæ¹æ³ãæäŸããŸããããã¯å®éšçãªæ©èœã§ãããæå¹ã«ããã«ã¯ããªãã£ã«ããã©ãŠã¶ãã©ã°ãå¿ èŠã«ãªãå Žåãããããšã«æ³šæããŠãã ããã
@scroll-timeline my-timeline {
source: element(body);
orientation: vertical;
scroll-offsets: 0, 100vh;
}
.animated-element {
animation: fade-in 1s linear;
animation-timeline: my-timeline;
animation-range: entry 0, exit 100%;
}
@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
ã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ãå®è£ ããéã¯ãåžžã«ã¢ã¯ã»ã·ããªãã£ãåªå ããŠãã ããã以äžã«ããã€ãã®éèŠãªèæ ®äºé ãæããŸãïŒ
- ä»£æ¿ææ®µã®æäŸïŒ ã¢ãã¡ãŒã·ã§ã³ã奜ãŸãªããŠãŒã¶ãŒãã³ã³ãã³ãã«ã¢ã¯ã»ã¹ããããã®ä»£æ¿æ¹æ³ãããããšã確èªããŠãã ãããããã«ã¯ãã¢ãã¡ãŒã·ã§ã³åãããã³ã³ãã³ãã®éçãªããŒãžã§ã³ãæäŸãããã代æ¿ã®ããã²ãŒã·ã§ã³ãªãã·ã§ã³ãæäŸãããããããšãå«ãŸããŸãã
- ãŠãŒã¶ãŒèšå®ã®å°éïŒ ãŠãŒã¶ãŒãæå°éã®ã¢ãã¡ãŒã·ã§ã³ã奜ãããšã瀺ãããšãã§ãã`prefers-reduced-motion`ã¡ãã£ã¢ã¯ãšãªãèæ ®ããŠãã ããããããã®ãŠãŒã¶ãŒã«å¯ŸããŠã¯ãã¢ãã¡ãŒã·ã§ã³ãç¡å¹ã«ãããã匷床ãäžããŠãã ããã
- ç¹æ» ããã¢ãã¡ãŒã·ã§ã³ãé¿ããïŒ ç¹æ» ããã¢ãã¡ãŒã·ã§ã³ã¯ãäžéšã®ãŠãŒã¶ãŒã«çºäœãåŒãèµ·ããå¯èœæ§ããããŸããæ¥éã«ç¹æ» ããã¢ãã¡ãŒã·ã§ã³ããã¿ãŒã³ã®äœ¿çšã¯é¿ããŠãã ããã
- ã¢ãã¡ãŒã·ã§ã³ã«æå³ãæãããïŒ ã¢ãã¡ãŒã·ã§ã³ã¯çŽç²ã«è£ 食çã§ãã£ãŠã¯ãªããããŠãŒã¶ãŒäœéšãåäžããããã®ã§ããã¹ãã§ããã¢ãã¡ãŒã·ã§ã³ãç®çãæããããŠãŒã¶ãŒã«äŸ¡å€ãæäŸããããšã確èªããŠãã ããã
- æ¯æŽæè¡ã§ã®ãã¹ãïŒ ã¹ã¯ãªãŒã³ãªãŒããŒããã®ä»ã®æ¯æŽæè¡ã䜿çšããŠã¢ãã¡ãŒã·ã§ã³ããã¹ãããé害ãæã€ãŠãŒã¶ãŒã«ãã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŠãã ããã
å®äžçã®äŸãšã€ã³ã¹ãã¬ãŒã·ã§ã³
ã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ã¯ããŠã§ãäžã§ããŸããŸãªé©æ°çãªæ¹æ³ã§äœ¿çšãããŠããŸããç¬èªã®äœåã®ã€ã³ã¹ãã¬ãŒã·ã§ã³ãšãªãããã€ãã®äŸã以äžã«ç€ºããŸãïŒ
- ã€ã³ã¿ã©ã¯ãã£ããªè£œåãã¢ïŒ ãŠãŒã¶ãŒã補åããŒãžãã¹ã¯ããŒã«ããã«ã€ããŠè£œåã®æ©èœãã¢ãã¡ãŒã·ã§ã³åããäž»èŠãªå©ç¹ãæ©èœæ§ã匷調ããŸãã
- ã¢ãã¡ãŒã·ã§ã³åãããããŒã¿å¯èŠåïŒ ãŠãŒã¶ãŒãã¹ã¯ããŒã«ããã«ã€ããŠããŒã¿ãã€ã³ãã衚瀺ãããã€ã³ã¿ã©ã¯ãã£ããªãã£ãŒããã°ã©ããäœæããè€éãªæ å ±ãããçè§£ããããããŸãã
- æ²¡å ¥åã¹ããŒãªãŒããªã³ã°äœéšïŒ ã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ã䜿çšããŠããŠãŒã¶ãŒãç©èªãã¹ã¯ããŒã«ããã«ã€ããŠå±éããé åçãªãã©ãã£ããäœæããŸããã€ã³ã¿ã©ã¯ãã£ããªããã¥ã¡ã³ã¿ãªãŒãã¢ãã¡ãŒã·ã§ã³åãããäŒèšãªã©ãèããŠã¿ãŠãã ããã
- ãã©ã©ãã¯ã¹ïŒèŠå·®ïŒã¹ã¯ããŒã«å¹æïŒ ãŠãŒã¶ãŒãã¹ã¯ããŒã«ããéã«ãããŒãžã®ç°ãªãã¬ã€ã€ãŒãç°ãªãé床ã§ã¢ãã¡ãŒã·ã§ã³ãããããšã§ã奥è¡ããšæ²¡å ¥æãçã¿åºããŸãã
- ããã²ãŒã·ã§ã³ãšé²è¡ç¶æ³ã€ã³ãžã±ãŒã¿ïŒ ããã²ãŒã·ã§ã³é ç®ããã€ã©ã€ãããããããã°ã¬ã¹ããŒã衚瀺ãããããŠããŠãŒã¶ãŒãã³ã³ãã³ãå šäœã«ããã£ãŠã¬ã€ãããçŸåšäœçœ®ã®æèŠãæäŸããŸãã
- ããŒããã©ãªãªãµã€ãïŒ ã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ã䜿çšããŠãäž»èŠãªãããžã§ã¯ããã¹ãã«ã匷調ãããã€ãããã¯ã§é åçãªæ¹æ³ã§äœåã玹ä»ããŸãã
é©åãªã¢ãããŒãã®éžæ
ã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ãå®è£ ããããã®æè¯ã®ã¢ãããŒãã¯ãç¹å®ã®ããŒãºãå¶çŽã«ãã£ãŠç°ãªããŸãã以äžã«ãããŸããŸãªéžæè¢ã®æŠèŠã瀺ããŸãïŒ
- JavaScriptããŒã¹ã®ã¢ãããŒãïŒ ãã®ã¢ãããŒãã¯æãåºç¯ãªãã©ãŠã¶äºææ§ãæäŸããã¢ãã¡ãŒã·ã§ã³ã«å¯Ÿãããã现ããªå¶åŸ¡ãå¯èœã«ããŸããè€éãªã¢ãã¡ãŒã·ã§ã³ãæå€§éã®æè»æ§ãæ±ãããããããžã§ã¯ãã«é©ããŠããŸãã
- Intersection Observer APIïŒ åŸæ¥ã®ã¹ã¯ããŒã«ã€ãã³ããªã¹ããŒãããããã©ãŒãã³ã¹ã®é«ãä»£æ¿ææ®µã§ããèŠçŽ ããã¥ãŒããŒãã«åºå ¥ãããéã«ã¢ãã¡ãŒã·ã§ã³ãããªã¬ãŒããã®ã«çæ³çã§ãã
- CSS Scroll TimelineïŒå®éšçæ©èœïŒïŒ ãã®ã¢ãããŒãã¯ãã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ã®ããã®ãã€ãã£ããªCSSãœãªã¥ãŒã·ã§ã³ãæäŸããŸããææãªæè¡ã§ãããçŸåšã®ãã©ãŠã¶ãµããŒãã¯éãããŠããŸããããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ããšããŠäœ¿çšããããšãæ€èšããŠãã ããã
- ã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ïŒ GreenSock (GSAP) ã ScrollMagic ãªã©ãããã€ãã®JavaScriptã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ã¯ãã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ãäœæããããã®æ¢è£œã®ããŒã«ãã³ã³ããŒãã³ããæäŸããŠããŸãããããã¯éçºããã»ã¹ãç°¡çŽ åããé«åºŠãªæ©èœãæäŸããããšãã§ããŸãã
çµè«
CSS Animation RangeããããŠããåºç¯ãªæŠå¿µã§ããã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ã¯ãé åçã§ã€ã³ã¿ã©ã¯ãã£ããªãŠã§ãäœéšãåµé ããããã®åŒ·åãªããŒã«ã§ããã³ã¢ã³ã³ã»ãããçè§£ããããŸããŸãªå®è£ æè¡ãæ¢æ±ããããšã§ãåµé çãªå¯èœæ§ã®äžçãè§£ãæŸã¡ããŠã§ããµã€ãã®ãŠãŒã¶ãŒäœéšãåäžãããããšãã§ããŸãããã¹ãŠã®ã¢ãã¡ãŒã·ã§ã³ããã¹ãŠã®ãŠãŒã¶ãŒã«ãšã£ãŠå©çšå¯èœã§æ¥œãããã®ã§ããããã«ãã¢ã¯ã»ã·ããªãã£ãšããã©ãŒãã³ã¹ãåªå ããããšãå¿ããªãã§ãã ãããCSS Scroll TimelineãããåºããµããŒããããããã«ãªãã«ã€ããŠãã¹ã¯ããŒã«ããŒã¹ã®ã¢ãã¡ãŒã·ã§ã³ã®æªæ¥ã¯ãããŸã§ä»¥äžã«æããèŠããŸãã