Intersection Observer APIã䜿çšããŠé å»¶èªã¿èŸŒã¿ãšç¡éã¹ã¯ããŒã«ãå®è£ ãããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãšã°ããŒãã«ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããæ¹æ³ãåŠã³ãŸãã
Intersection ObserverïŒé å»¶èªã¿èŸŒã¿ãšç¡éã¹ã¯ããŒã«ã«ããWebããã©ãŒãã³ã¹ã®æé©å
仿¥ã®Webéçºã®äžçã§ã¯ãããã©ãŒãã³ã¹ãæãéèŠã§ãããŠãŒã¶ãŒã¯ãå Žæãããã€ã¹ã«é¢ä¿ãªããé«éã§å¿çæ§ã®é«ããŠã§ããµã€ããæåŸ ããŠããŸããIntersection Observer APIã¯ãé å»¶èªã¿èŸŒã¿ãç¡éã¹ã¯ããŒã«ã®ãããªãã¯ããã¯ãå®è£ ããããšã§ãWebããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããã匷åãªæ¹æ³ãæäŸããŸãããã®èšäºã§ã¯ãIntersection Observer APIãçè§£ããæŽ»çšããŠãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã®ããã«ããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåµåºããããã®å æ¬çãªã¬ã€ããæäŸããŸãã
Intersection Observer APIãšã¯ïŒ
Intersection Observer APIã¯ãã¿ãŒã²ããèŠçŽ ãšç¥å èŠçŽ ãŸãã¯ããã¥ã¡ã³ãã®ãã¥ãŒããŒããšã®äº€å·®ã®å€åãéåæã§ç£èŠããæ¹æ³ãæäŸããŸããç°¡åã«èšããšãåžžã«ããŒãªã³ã°ãããããªãœãŒã¹ã倧éã«æ¶è²»ããã€ãã³ããªã¹ããŒã䜿çšãããããããšãªããèŠçŽ ãç»é¢äžã§ïŒãŸãã¯å¥ã®èŠçŽ ã«å¯ŸããŠïŒè¡šç€ºãããããšãæ€åºã§ããŸããããã¯ãå®éã«å¿ èŠã«ãªããŸã§ç¹å®ã®æäœã®èªã¿èŸŒã¿ãå®è¡ãé å»¶ãããããšãã§ãããããããã©ãŒãã³ã¹ã®æé©åã«ãšã£ãŠéåžžã«éèŠã§ãã
äž»èŠãªæŠå¿µïŒ
- ã¿ãŒã²ããèŠçŽ ïŒ äº€å·®ãç£èŠãããèŠçŽ ã
- ã«ãŒãèŠçŽ ïŒ äº€å·®ã®ãã¥ãŒããŒãïŒãŸãã¯ããŠã³ãã£ã³ã°ããã¯ã¹ïŒãšããŠæ©èœããç¥å
èŠçŽ ã
null
ã«èšå®ãããšãããã¥ã¡ã³ãã®ãã¥ãŒããŒãã䜿çšãããŸãã - ãããå€ïŒ ã¿ãŒã²ããèŠçŽ ã®å¯èŠæ§ã®ã©ã®å²åã§ã³ãŒã«ããã¯é¢æ°ãå®è¡ãã¹ãããç€ºãæ°å€ãŸãã¯æ°å€ã®é åããããå€0ã¯ãã¿ãŒã²ããã®1ãã¯ã»ã«ã§ã衚瀺ããããšããã«ã³ãŒã«ããã¯ãå®è¡ãããããšãæå³ããŸãããããå€1.0ã¯ãã¿ãŒã²ããèŠçŽ ã®100%ã衚瀺ãããŠããå¿ èŠãããããšãæå³ããŸãã
- ã³ãŒã«ããã¯é¢æ°ïŒ 亀差ãå€åããæå®ããããããå€ã«éãããšãã«å®è¡ããã颿°ã
- 亀差æ¯çïŒ ã«ãŒãèŠçŽ å ã§è¡šç€ºãããŠããã¿ãŒã²ããèŠçŽ ã®éã衚ã0ãã1ã®éã®å€ã
é å»¶èªã¿èŸŒã¿ïŒãªãœãŒã¹ããªã³ããã³ãã§èªã¿èŸŒã
é å»¶èªã¿èŸŒã¿ã¯ããªãœãŒã¹ïŒç»åãåç»ãã¹ã¯ãªãããªã©ïŒãå¿ èŠã«ãªããŸã§ãéåžžã¯ãã¥ãŒããŒãã«å ¥ã£ãŠããçŽåãŸã§èªã¿èŸŒã¿ãé å»¶ããããã¯ããã¯ã§ããããã«ãããç¹ã«å€ãã®ãªãœãŒã¹ãæã€ããŒãžã§ãåæããŒãžã®èªã¿èŸŒã¿æéãå€§å¹ ã«ççž®ãããããã©ãŒãã³ã¹ãåäžããŸãããã¹ãŠã®ç»åãäžåºŠã«èªã¿èŸŒã代ããã«ããŠãŒã¶ãŒãããã«èŠãå¯èœæ§ãé«ããã®ã ããèªã¿èŸŒã¿ãŸãããŠãŒã¶ãŒãã¹ã¯ããŒã«ããã«ã€ããŠãããã«å€ãã®ç»åãèªã¿èŸŒãŸããŸããããã¯ãã€ã³ã¿ãŒãããæ¥ç¶ãé ããŠãŒã¶ãŒãããŒã¿ãã©ã³ãéãããŠãããŠãŒã¶ãŒã«ãšã£ãŠç¹ã«æçã§ãã
Intersection Observerã«ããé å»¶èªã¿èŸŒã¿ã®å®è£
Intersection Observer APIã䜿çšããŠé å»¶èªã¿èŸŒã¿ãå®è£ ããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
- HTMLã®ã»ããã¢ããïŒ ãã¬ãŒã¹ãã«ããŒç»åãŸãã¯ãå®éã®ç»åURLãå«ã
data-src
屿§ãæã€ç©ºã®<img>
ã¿ã°ããå§ããŸãã - Intersection Observerã®äœæïŒ ã³ãŒã«ããã¯é¢æ°ãšãªãã·ã§ã³ã®ãªãã·ã§ã³ãªããžã§ã¯ããæž¡ããŠãæ°ãã
IntersectionObserver
ãªããžã§ã¯ããã€ã³ã¹ã¿ã³ã¹åããŸãã - ã¿ãŒã²ããèŠçŽ ã®ç£èŠïŒ
observe()
ã¡ãœããã䜿çšããŠãåã¿ãŒã²ããèŠçŽ ïŒãã®å Žåã¯ç»åïŒã®ç£èŠãéå§ããŸãã - ã³ãŒã«ããã¯é¢æ°å ïŒ ã¿ãŒã²ããèŠçŽ ãïŒæå®ããããããå€ã«åºã¥ããŠïŒãã¥ãŒããŒããšäº€å·®ãããšãã«ããã¬ãŒã¹ãã«ããŒãå®éã®ç»åURLã«çœ®ãæããŸãã
- ã¿ãŒã²ããèŠçŽ ã®ç£èŠãè§£é€ïŒ ç»åãèªã¿èŸŒãŸããããäžèŠãªã³ãŒã«ããã¯ãé²ãããã«ã¿ãŒã²ããèŠçŽ ã®ç£èŠãè§£é€ããŸãã
ã³ãŒãäŸïŒç»åã®é å»¶èªã¿èŸŒã¿
ãã®äŸã§ã¯ãIntersection Observer APIã䜿çšããç»åã®é å»¶èªã¿èŸŒã¿ã瀺ããŸãã
<!-- HTML -->
<img data-src="image1.jpg" alt="ç»å1" class="lazy-load">
<img data-src="image2.jpg" alt="ç»å2" class="lazy-load">
<img data-src="image3.jpg" alt="ç»å3" class="lazy-load">
<script>
const lazyLoadImages = document.querySelectorAll('.lazy-load');
const options = {
root: null, // ãã¥ãŒããŒããã«ãŒããšããŠäœ¿çš
rootMargin: '0px',
threshold: 0.2 // ç»åã®20%ã衚瀺ããããèªã¿èŸŒã
};
const lazyLoad = (image, observer) => {
image.src = image.dataset.src;
image.onload = () => {
image.classList.remove('lazy-load');
observer.unobserve(image);
};
};
const observer = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
lazyLoad(entry.target, observer);
}
});
}, options);
lazyLoadImages.forEach(image => {
observer.observe(image);
});
</script>
é å»¶èªã¿èŸŒã¿ã®å©ç¹ïŒ
- åæèªã¿èŸŒã¿æéã®ççž®ïŒ æåã«å¿ èŠãªãªãœãŒã¹ã®ã¿ãèªã¿èŸŒãããšã§ãåæããŒãžã®èªã¿èŸŒã¿æéãå€§å¹ ã«ççž®ãããããé«éã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸãã
- 垯åå¹ ã®ç¯çŽïŒ ãŠãŒã¶ãŒã¯å®éã«å¿ èŠãªãªãœãŒã¹ã®ã¿ãããŠã³ããŒããããããç¹ã«ã¢ãã€ã«ããã€ã¹ãããŒã¿ãã©ã³ãéãããŠãããŠãŒã¶ãŒã®åž¯åå¹ ãç¯çŽã§ããŸãã
- ããã©ãŒãã³ã¹ã®åäžïŒ ãªãœãŒã¹ã®èªã¿èŸŒã¿ãé å»¶ãããããšã§ããã©ãŠã¶ã®ãªãœãŒã¹ãè§£æŸãããå šäœçãªããã©ãŒãã³ã¹ãåäžããã¹ã¯ããŒã«ãã¹ã ãŒãºã«ãªããŸãã
- SEOã®å©ç¹ïŒ èªã¿èŸŒã¿æéãéãããšã¯ãæ€çŽ¢ãšã³ãžã³ã«ãšã£ãŠè¯å®çãªã©ã³ãã³ã°èŠå ã§ãã
ç¡éã¹ã¯ããŒã«ïŒã·ãŒã ã¬ã¹ãªã³ã³ãã³ãèªã¿èŸŒã¿
ç¡éã¹ã¯ããŒã«ã¯ããŠãŒã¶ãŒãããŒãžãäžã«ã¹ã¯ããŒã«ããã«ã€ããŠããå€ãã®ã³ã³ãã³ããèªã¿èŸŒã¿ãã·ãŒã ã¬ã¹ã§é£ç¶çãªãã©ãŠãžã³ã°äœéšãçã¿åºããã¯ããã¯ã§ããããã¯ããœãŒã·ã£ã«ã¡ãã£ã¢ã®ãã£ãŒããeã³ããŒã¹ã®ååãªã¹ãããã¥ãŒã¹ãµã€ãã§äžè¬çã«äœ¿çšãããŠããŸããã³ã³ãã³ããå¥ã ã®ããŒãžã«ããŒãžããŒã·ã§ã³ãã代ããã«ããŠãŒã¶ãŒãçŸåšã®ã³ã³ãã³ãã®æ«å°Ÿã«å°éãããšãæ°ããã³ã³ãã³ããèªåçã«èªã¿èŸŒãŸããæ¢åã®ã³ã³ãã³ãã«è¿œå ãããŸãã
Intersection Observerã«ããç¡éã¹ã¯ããŒã«ã®å®è£
Intersection Observer APIã䜿çšããŠããŠãŒã¶ãŒãã³ã³ãã³ãã®æ«å°Ÿã«å°éããããšãæ€åºããããå€ãã®ã³ã³ãã³ãã®èªã¿èŸŒã¿ãããªã¬ãŒããããšãã§ããŸãã
- ã»ã³ããã«èŠçŽ ã®äœæïŒ ã³ã³ãã³ãã®æ«å°Ÿã«ã»ã³ããã«èŠçŽ ïŒäŸïŒ
<div>
ïŒã远å ããŸãããã®èŠçŽ ã¯ããŠãŒã¶ãŒãããŒãžã®æäžéšã«å°éããããšãæ€åºããããã«äœ¿çšãããŸãã - Intersection Observerã®äœæïŒ ã»ã³ããã«èŠçŽ ãç£èŠããæ°ãã
IntersectionObserver
ãªããžã§ã¯ããã€ã³ã¹ã¿ã³ã¹åããŸãã - ã³ãŒã«ããã¯é¢æ°å ïŒ ã»ã³ããã«èŠçŽ ããã¥ãŒããŒããšäº€å·®ãããšãã«ãããå€ãã®ã³ã³ãã³ãã®èªã¿èŸŒã¿ãããªã¬ãŒããŸããããã«ã¯éåžžãæ¬¡ã®ããŒã¿ã®ããããååŸããããã®APIãªã¯ãšã¹ããå«ãŸããŸãã
- æ°ããã³ã³ãã³ãã®è¿œå ïŒ æ°ããã³ã³ãã³ããååŸããããããããããŒãžäžã®æ¢åã®ã³ã³ãã³ãã«è¿œå ããŸãã
- ã»ã³ããã«èŠçŽ ã®ç§»åïŒ æ°ããã³ã³ãã³ãã远å ããåŸãã»ã³ããã«èŠçŽ ãæ°ãã远å ãããã³ã³ãã³ãã®æ«å°Ÿã«ç§»åããŠããããªãã¹ã¯ããŒã«ã®ç£èŠãç¶ããŸãã
ã³ãŒãäŸïŒç¡éã¹ã¯ããŒã«
ãã®äŸã§ã¯ãIntersection Observer APIã䜿çšããç¡éã¹ã¯ããŒã«ã瀺ããŸãã
<!-- HTML -->
<div id="content">
<p>åæã³ã³ãã³ã</p>
</div>
<div id="sentinel"></div>
<script>
const content = document.getElementById('content');
const sentinel = document.getElementById('sentinel');
let page = 1; // åæããŒãžçªå·
let loading = false; // è€æ°åã®èªã¿èŸŒã¿ãé²ãããã®ãã©ã°
const options = {
root: null, // ãã¥ãŒããŒããã«ãŒããšããŠäœ¿çš
rootMargin: '0px',
threshold: 0.1 // ã»ã³ããã«ã®10%ã衚瀺ããããèªã¿èŸŒã
};
const loadMoreContent = async () => {
if (loading) return;
loading = true;
// APIããã®ããŒã¿ååŸãã·ãã¥ã¬ãŒãïŒå®éã®APIåŒã³åºãã«çœ®ãæããŠãã ããïŒ
setTimeout(() => {
const newContent = Array.from({ length: 10 }, (_, i) => `<p>ããŒãž${page + 1}ã®ã³ã³ãã³ããé
ç®${i + 1}</p>`).join('');
content.innerHTML += newContent;
page++;
loading = false;
}, 1000);
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting && !loading) {
loadMoreContent();
}
});
}, options);
observer.observe(sentinel);
</script>
ç¡éã¹ã¯ããŒã«ã®èæ ®äºé ïŒ
- ã¢ã¯ã»ã·ããªãã£ïŒ ç¡éã¹ã¯ããŒã«ãé害ã®ãããŠãŒã¶ãŒã«ãã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŠãã ãããããŠã¹ãã¹ã¯ããŒã«ãã€ãŒã«ã䜿çšã§ããªããŠãŒã¶ãŒã®ããã«ããããã«èªã¿èŸŒãããã¿ã³ãªã©ã®ä»£æ¿ããã²ãŒã·ã§ã³ãªãã·ã§ã³ãæäŸããŠãã ããããŸããæ°ããã³ã³ãã³ããèªã¿èŸŒãã åŸããã©ãŒã«ã¹ãé©åã«ç®¡çãããã¹ã¯ãªãŒã³ãªãŒããŒãŠãŒã¶ãŒã倿Žã«æ°ä»ãããã«ããŠãã ããã
- ããã©ãŒãã³ã¹ïŒ ããã©ãŒãã³ã¹ã®åé¡ãé¿ããããã«ãæ°ããã³ã³ãã³ãã®èªã¿èŸŒã¿ãæé©åããŠãã ããããããŠã³ã¹ãã¹ããããªã³ã°ãªã©ã®ãã¯ããã¯ã䜿çšããŠãAPIãªã¯ãšã¹ãã®é »åºŠãå¶éããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒ ããå€ãã®ã³ã³ãã³ããèªã¿èŸŒãŸããŠããããšã瀺ãèŠèŠçãªãã£ãŒãããã¯ãæäŸããŠãã ãããäžåºŠã«å€ãããã³ã³ãã³ãã§ãŠãŒã¶ãŒãå§åããªãããã«ããŠãã ããããªã¯ãšã¹ãããšã«èªã¿èŸŒãŸããã¢ã€ãã ã®æ°ãå¶éããããšãæ€èšããŠãã ããã
- SEOïŒ ç¡éã¹ã¯ããŒã«ã¯ãæ£ããå®è£ ãããŠããªãå ŽåãSEOã«æªåœ±é¿ãäžããå¯èœæ§ããããŸããæ€çŽ¢ãšã³ãžã³ããã¹ãŠã®ã³ã³ãã³ããã¯ããŒã«ããŠã€ã³ããã¯ã¹ã§ããããšã確èªããŠãã ãããé©åãªHTMLæ§é ã䜿çšããæ€çŽ¢ãšã³ãžã³ã¯ããŒã©ãŒåãã®ããŒãžããŒã·ã§ã³ã®å®è£ ãæ€èšããŠãã ããã
- History APIïŒ History APIã䜿çšããŠããŠãŒã¶ãŒãã¹ã¯ããŒã«ããã«ã€ããŠURLãæŽæ°ããããŒãžã®ç¹å®ã®ã»ã¯ã·ã§ã³ãå ±æãŸãã¯ããã¯ããŒã¯ã§ããããã«ããŸãã
ãã©ãŠã¶ã®äºææ§ãšããªãã£ã«
Intersection Observer APIã¯ãææ°ã®ãã©ãŠã¶ã§åºããµããŒããããŠããŸãããã ããå€ããã©ãŠã¶ã§ã¯ãã€ãã£ãã«ãµããŒããããŠããªãå ŽåããããŸãããã¹ãŠã®ãã©ãŠã¶ã§äºææ§ã確ä¿ããããã«ãããªãã£ã«ã䜿çšã§ããŸããããªãã£ã«ã¯ãå€ããã©ãŠã¶ã§æ°ããAPIã®æ©èœãæäŸããã³ãŒãã®äžéšã§ãã
ããã€ãã®Intersection Observerããªãã£ã«ãå©çšå¯èœã§ãã人æ°ã®ãããªãã·ã§ã³ã¯ãå ¬åŒã®W3Cããªãã£ã«ã§ããããªãã£ã«ã䜿çšããã«ã¯ãIntersection Observer APIã䜿çšããJavaScriptã³ãŒãã®åã«HTMLã«å«ããã ãã§ãã
<script src="intersection-observer.js"></script>
<script src="your-script.js"></script>
ãã¹ããã©ã¯ãã£ã¹ãšæé©åãã¯ããã¯
- é©å㪠ãããå€ã®éžæïŒ ããã©ãŒãã³ã¹ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®æé©ãªãã©ã³ã¹ãèŠã€ããããã«ãããŸããŸãª ãããå€ã®å€ã詊ããŠãã ããããããå€ãäœããšã³ãŒã«ããã¯é¢æ°ãæ©ãããªã¬ãŒãããé«ããšé å»¶ããŸãã
- APIãªã¯ãšã¹ãã®ãããŠã³ã¹ãŸãã¯ã¹ããããªã³ã°ïŒ ç¡éã¹ã¯ããŒã«ã®ããã®APIãªã¯ãšã¹ãã®é »åºŠãå¶éããŠããµãŒããŒãžã®éè² è·ãé¿ããããã©ãŒãã³ã¹ãåäžãããŸãããããŠã³ã¹ã¯ãæåŸã®åŒã³åºãããäžå®æéãçµéããåŸã«ã®ã¿é¢æ°ãåŒã³åºãããããšãä¿èšŒããŸããã¹ããããªã³ã°ã¯ãæå®ãããæéå ã«æå€§ã§ãäžåºŠãã颿°ãåŒã³åºãããªãããšãä¿èšŒããŸãã
- ç»åèªã¿èŸŒã¿ã®æé©åïŒ æé©åãããç»å圢åŒïŒäŸïŒWebPïŒã䜿çšããç»åãå§çž®ããŠãã¡ã€ã«ãµã€ãºãåæžããŸããã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒã䜿çšããŠããŠãŒã¶ãŒã®å Žæã«è¿ããµãŒããŒããç»åãé ä¿¡ããããšãæ€èšããŠãã ããã
- èªã¿èŸŒã¿ã€ã³ãžã±ãŒã¿ãŒã®äœ¿çšïŒ ãªãœãŒã¹ãèªã¿èŸŒãŸããŠããããšã瀺ãèŠèŠçãªãã£ãŒãããã¯ãæäŸããŸããããã¯ãåçŽãªã¹ãããŒãããã°ã¬ã¹ããŒã«ããããšãã§ããŸãã
- ãšã©ãŒã®é©åãªåŠçïŒ ãªãœãŒã¹ã®èªã¿èŸŒã¿ã«å€±æããå Žåã«é©åã«å¯ŸåŠããããã®ãšã©ãŒãã³ããªã³ã°ãå®è£ ããŸãããŠãŒã¶ãŒã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããªãœãŒã¹ã®åèªã¿èŸŒã¿ã詊ã¿ããªãã·ã§ã³ãæäŸããŸãã
- äžèŠã«ãªã£ãèŠçŽ ã®ç£èŠãè§£é€ïŒ
unobserve()
ã¡ãœããã䜿çšããŠãäžèŠã«ãªã£ãèŠçŽ ã®ç£èŠã忢ããŸããããã«ããããã©ãŠã¶ã®ãªãœãŒã¹ãè§£æŸãããããã©ãŒãã³ã¹ãåäžããŸããäŸãã°ãç»åãæ£åžžã«èªã¿èŸŒãŸãããããã®ç£èŠãè§£é€ããå¿ èŠããããŸãã
ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
é å»¶èªã¿èŸŒã¿ãšç¡éã¹ã¯ããŒã«ãå®è£ ããéã«ã¯ãé害ã®ãããŠãŒã¶ãŒãå«ããã¹ãŠã®äººããŠã§ããµã€ããå©çšã§ããããã«ãã¢ã¯ã»ã·ããªãã£ãèæ ®ããããšãéèŠã§ãã
- 代æ¿ããã²ãŒã·ã§ã³ã®æäŸïŒ ç¡éã¹ã¯ããŒã«ã®å ŽåãããŠã¹ãã¹ã¯ããŒã«ãã€ãŒã«ã䜿çšã§ããªããŠãŒã¶ãŒã®ããã«ããããã«èªã¿èŸŒãããã¿ã³ãããŒãžããŒã·ã§ã³ãªã©ã®ä»£æ¿ããã²ãŒã·ã§ã³ãªãã·ã§ã³ãæäŸããŸãã
- ãã©ãŒã«ã¹ã®ç®¡çïŒ ç¡éã¹ã¯ããŒã«ã§æ°ããã³ã³ãã³ããèªã¿èŸŒãéã«ã¯ããã©ãŒã«ã¹ãé©åã«ç®¡çãããŠããããšã確èªããŠãã ãããæ°ããèªã¿èŸŒãŸããã³ã³ãã³ãã«ãã©ãŒã«ã¹ãç§»åãããŠãã¹ã¯ãªãŒã³ãªãŒããŒãŠãŒã¶ãŒã倿Žã«æ°ä»ãããã«ããŸããããã¯ãæ°ããã³ã³ãã³ãã®ã³ã³ããèŠçŽ ã«
tabindex
屿§ã-1
ã«èšå®ãããã®èŠçŽ ã§focus()
ã¡ãœãããåŒã³åºãããšã§å®çŸã§ããŸãã - ã»ãã³ãã£ãã¯HTMLã®äœ¿çšïŒ ã»ãã³ãã£ãã¯HTMLèŠçŽ ã䜿çšããŠãã³ã³ãã³ãã«æ§é ãšæå³ãæäŸããŸããããã«ãããã¹ã¯ãªãŒã³ãªãŒããŒãã³ã³ãã³ããçè§£ããããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããã®ã«åœ¹ç«ã¡ãŸããäŸãã°ãé¢é£ããã³ã³ãã³ããã°ã«ãŒãåããããã«
<article>
èŠçŽ ã䜿çšããŸãã - ARIA屿§ã®æäŸïŒ ARIAïŒAccessible Rich Internet ApplicationsïŒå±æ§ã䜿çšããŠãæ¯æŽæè¡ã«è¿œå æ
å ±ãæäŸããŸããäŸãã°ãããŒãžã®é åãåçã«æŽæ°ãããŠããããšã瀺ãããã«
aria-live
屿§ã䜿çšããŸãã - æ¯æŽæè¡ã§ã®ãã¹ãïŒ ã¹ã¯ãªãŒã³ãªãŒããŒãªã©ã®æ¯æŽæè¡ã§ãŠã§ããµã€ãããã¹ãããŠãé害ã®ãããŠãŒã¶ãŒã«ã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŸãã
å®éã®äŸ
å€ãã®äººæ°ã®ãããŠã§ããµã€ããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããã©ãŒãã³ã¹ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã«ãé å»¶èªã¿èŸŒã¿ãšç¡éã¹ã¯ããŒã«ã䜿çšãããŠããŸãã以äžã«ããã€ãã®äŸãæããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ïŒäŸïŒFacebookãTwitterãInstagramïŒïŒ ãããã®ãã©ãããã©ãŒã ã¯ããŠãŒã¶ãŒããã£ãŒããäžã«ã¹ã¯ããŒã«ããã«ã€ããŠããå€ãã®ã³ã³ãã³ããèªã¿èŸŒãããã«ç¡éã¹ã¯ããŒã«ã䜿çšããŠããŸãããŸããç»åãåç»ããã¥ãŒã«å ¥ã£ãŠããçŽåã«ã®ã¿èªã¿èŸŒãããã«é å»¶èªã¿èŸŒã¿ã䜿çšããŠããŸãã
- eã³ããŒã¹ãŠã§ããµã€ãïŒäŸïŒAmazonãAlibabaãeBayïŒïŒ ãããã®ãŠã§ããµã€ãã¯ãååç»åãèªã¿èŸŒãããã«é å»¶èªã¿èŸŒã¿ã䜿çšãããŠãŒã¶ãŒãããŒãžãäžã«ã¹ã¯ããŒã«ããã«ã€ããŠããå€ãã®ååãªã¹ããèªã¿èŸŒãããã«ç¡éã¹ã¯ããŒã«ã䜿çšããŠããŸããããã¯ã倿°ã®ååãæã€eã³ããŒã¹ãµã€ãã«ãšã£ãŠç¹ã«éèŠã§ãã
- ãã¥ãŒã¹ãŠã§ããµã€ãïŒäŸïŒThe New York TimesãBBC NewsïŒïŒ ãããã®ãŠã§ããµã€ãã¯ãç»åãåç»ãèªã¿èŸŒãããã«é å»¶èªã¿èŸŒã¿ã䜿çšãããŠãŒã¶ãŒãããŒãžãäžã«ã¹ã¯ããŒã«ããã«ã€ããŠããå€ãã®èšäºãèªã¿èŸŒãããã«ç¡éã¹ã¯ããŒã«ã䜿çšããŠããŸãã
- ç»åãã¹ãã£ã³ã°ãã©ãããã©ãŒã ïŒäŸïŒUnsplashãPexelsïŒïŒ ãããã®ãã©ãããã©ãŒã ã¯ããŠãŒã¶ãŒãããŒãžãäžã«ã¹ã¯ããŒã«ããã«ã€ããŠç»åãèªã¿èŸŒãããã«é å»¶èªã¿èŸŒã¿ã䜿çšããããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããã垯åå¹ ã®æ¶è²»ãåæžããŠããŸãã
çµè«
Intersection Observer APIã¯ãé å»¶èªã¿èŸŒã¿ãç¡éã¹ã¯ããŒã«ã®ãããªãã¯ããã¯ãå®è£ ããããšã§ãWebããã©ãŒãã³ã¹ãæé©åããããã®åŒ·åãªããŒã«ã§ãããã®APIã䜿çšããããšã§ãåæããŒãžã®èªã¿èŸŒã¿æéãå€§å¹ ã«ççž®ãã垯åå¹ ãç¯çŽããå šäœçãªããã©ãŒãã³ã¹ãåäžãããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã®ããã«ããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåµåºããããšãã§ããŸãããããã®ãã¯ããã¯ãå®è£ ããéã«ã¯ããŠã§ããµã€ãããã¹ãŠã®äººã«å©çšå¯èœã§ããããšãä¿èšŒããããã«ãã¢ã¯ã»ã·ããªãã£ãèæ ®ããããšãå¿ããªãã§ãã ããããã®èšäºã§æŠèª¬ããæŠå¿µãšãã¹ããã©ã¯ãã£ã¹ãçè§£ããããšã§ãIntersection Observer APIãæŽ»çšããŠãããéããããå¿çæ§ãé«ããããã¢ã¯ã»ã·ãã«ãªãŠã§ããµã€ããæ§ç¯ããããšãã§ããŸãã