Pointer Events APIã解説ãããŠã¹ãã¿ããããã³å ¥åãçµ±åãã倿§ãªããã€ã¹ã§ã®ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³åŠçãå¹çåãããã©ãŠã¶æšæºã§ãã
Pointer Events API: å ¥åããã€ã¹åŠçãžã®çµ±äžãããã¢ãããŒã
ãŠã§ãéçºã®çµ¶ãéãªãé²åã®äžã§ãå€çš®å€æ§ãªããã€ã¹éã§ã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã確ä¿ããããšãæãéèŠã§ããPointer Events APIã¯ã匷åãªãœãªã¥ãŒã·ã§ã³ãšããŠç»å ŽããããŠã¹ãã¿ããã¹ã¯ãªãŒã³ããã³ãªã©ãããŸããŸãªããã€ã¹ããã®å ¥åãåŠçããããã®çµ±äžãããã¢ãããŒããæäŸããŸãããã®APIã¯ãéçºããã»ã¹ãç°¡çŽ åããã¯ãã¹ããã€ã¹äºææ§ã匷åããçŸä»£ã®ãŠã§ãéçºè ã«ãšã£ãŠäžå¯æ¬ ãªããŒã«ãšãªã£ãŠããŸãã
çµ±äžãããAPIã®å¿ èŠæ§ãçè§£ãã
åŸæ¥ããŠã§ãéçºè ã¯ããŠã¹ãã¿ããããã³ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«å¯ŸããŠãå¥ã ã®ã€ãã³ããªã¹ããŒã«äŸåããå¿ èŠããããŸããããã®ã¢ãããŒãã¯ãã³ãŒãã®éè€ãè€éãã®å¢å ãããã³ç°ãªããã©ãããã©ãŒã éã§ã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ãããæœåšçãªäžæŽåã«ã€ãªããããšããããããŸãããPointer Events APIã¯ããã¹ãŠã®ã¿ã€ãã®ãã€ã³ã¿ãŒå ¥åã衚ãåäžã®ã€ãã³ãã»ãããæäŸããããšã«ããããããã®èª²é¡ã«å¯ŸåŠããŸãã
æç»ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŠããã·ããªãªãèããŠã¿ãŸããããPointer Events APIããªãå ŽåãããŠã¹ã®ã¯ãªãã¯ãšãã©ãã°ãã¿ãããžã§ã¹ãã£ãŒãããã³ãã³ã®ã¹ãããŒã¯ã«å¯ŸããŠå¥ã ã®ã€ãã³ããã³ãã©ãŒãå®è£ ããå¿ èŠããããŸããããã«ãããåé·ãªã³ãŒããçºçãããã¹ãŠã®å ¥åæ¹æ³ã§äžè²«ããåäœãä¿èšŒããããšãå°é£ã«ãªããŸããPointer Events APIã䜿çšãããšãåäžã®ã€ãã³ããªã¹ããŒã»ããã§ãã¹ãŠã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãåŠçã§ãããããã³ãŒããå¹çåããä¿å®æ§ãåäžãããããšãã§ããŸãã
Pointer Eventsãšã¯äœã§ããïŒ
Pointer Eventsã¯ããã€ã³ãã£ã³ã°ããã€ã¹ããã®å ¥åãåŠçããããã®ããŒããŠã§ã¢ã«äŸåããªãæ¹æ³ã衚ããŸããåããã€ã¹ã®ä»æ§ãæœè±¡åããéçºè ã䜿çšããããã®äžè²«ããã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸããããã€ã³ã¿ãŒãã¯ãããŠã¹ã«ãŒãœã«ãã¿ããã¹ã¯ãªãŒã³ã«è§ŠããæããŸãã¯ããžã¿ã«ã¿ãã¬ããäžã«ãããŒãããã³ãªã©ã§ãã
ã³ã¢ãšãªãæŠå¿µã¯ãå ¥åããã€ã¹ã«é¢ä¿ãªããåãã€ãã³ãã»ãããããªã¬ãŒãããéçºè ããã¹ãŠã®ãã©ãããã©ãŒã ã§äžè²«ããŠå¿çããã³ãŒããäœæã§ããããšã§ããããã«ãããéçºããã»ã¹ãå€§å¹ ã«ç°¡çŽ åãããã¯ãã¹ããã€ã¹äºææ§ã®åé¡ãçºçããå¯èœæ§ãäœããªããŸãã
Pointer Events APIã䜿çšããäž»ãªå©ç¹
- çµ±äžãããå ¥ååŠç: ãã¹ãŠã®ãã€ã³ãã£ã³ã°ããã€ã¹ã«å¯ŸããŠåäžã®ã€ãã³ãã»ãããæäŸããããšã«ãããã³ãŒããç°¡çŽ åããŸãã
- æ¹åãããã¯ãã¹ããã€ã¹äºææ§: ãã¹ã¯ããããã¿ãã¬ãããããã³ã¹ããŒããã©ã³å šäœã§äžè²«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒããŸãã
- ã³ãŒãã®éè€ã®åæž: ããŸããŸãªå ¥åæ¹æ³ã«å¯ŸããŠå¥ã ã®ã€ãã³ããã³ãã©ãŒãäœæããå¿ èŠæ§ãæé€ããŸãã
- 匷åãããä¿å®æ§: ã³ãŒããçè§£ããããã°ãããã³æŽæ°ããããããŸãã
- å°æ¥ãžã®å¯Ÿå¿: æ°ããå ¥åããã€ã¹ããã³ã€ã³ã¿ã©ã¯ã·ã§ã³ã¢ãã«ã«é©å¿ã§ããæè»ãªãã¬ãŒã ã¯ãŒã¯ãæäŸããŸãã
ã³ã¢Pointer Eventã¿ã€ã
Pointer Events APIã¯ããã€ã³ã¿ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã®ããŸããŸãªæ®µéã衚ãã€ãã³ãã¿ã€ãã®ã»ãããå®çŸ©ããŸãã
- pointerdown: ãã€ã³ã¿ãŒãã¢ã¯ãã£ãã«ãªã£ããšãã«çºçããŸããããã¯éåžžããŠãŒã¶ãŒãããŠã¹ãã¿ã³ãæŒããã¿ããã¹ã¯ãªãŒã³ã«è§ŠããããŸãã¯ãã³ãã¿ãã¬ããã«æ¥è§Šããããšãã«çºçããŸãã
- pointermove: ãã€ã³ã¿ãŒãã¢ã¯ãã£ããªç¶æ ã§ç§»åãããšãã«çºçããŸããããã¯ããã¿ã³ãæŒãããç¶æ ã§ã®ããŠã¹ã®åããã¿ããã¹ã¯ãªãŒã³äžã§ã®æã®ãã©ãã°ããŸãã¯ãã³ãã¿ãã¬ããã«è§ŠããŠããç¶æ ã§ã®ãã³ã®ç§»åã«å¯Ÿå¿ããŸãã
- pointerup: ãã€ã³ã¿ãŒãéã¢ã¯ãã£ãã«ãªã£ããšãã«çºçããŸããããã¯ããŠãŒã¶ãŒãããŠã¹ãã¿ã³ãé¢ããã¿ããã¹ã¯ãªãŒã³ããæãé¢ãããŸãã¯ã¿ãã¬ãããããã³ãæã¡äžãããšãã«çºçããŸãã
- pointercancel: ãã€ã³ã¿ãŒããã£ã³ã»ã«ããããšãã«çºçããŸããããã¯ããŠãŒã¶ãŒã®æãã¿ããã¹ã¯ãªãŒã³ããæ»ãèœã¡ãå Žåããã©ãŠã¶ãå¶çºçãªã¿ãããæ€åºããå ŽåããŸãã¯å¥ã®ã€ãã³ãããã€ã³ã¿ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãäžæããå Žåã«çºçããå¯èœæ§ããããŸãã
- pointerover: ãã€ã³ã¿ãŒãèŠçŽ äžã«ç§»åãããšãã«çºçããŸããããã¯mouseoverã€ãã³ãã«äŒŒãŠããŸããããã¹ãŠã®ãã€ã³ã¿ãŒã¿ã€ãã«é©çšãããŸãã
- pointerout: ãã€ã³ã¿ãŒãèŠçŽ ããç§»åãããšãã«çºçããŸããããã¯mouseoutã€ãã³ãã«äŒŒãŠããŸããããã¹ãŠã®ãã€ã³ã¿ãŒã¿ã€ãã«é©çšãããŸãã
- pointerenter: ãã€ã³ã¿ãŒãèŠçŽ ã®å¢çå ã«å ¥ã£ããšãã«çºçããŸãããã®ã€ãã³ãã¯ããã€ã³ã¿ãŒãæåã«èŠçŽ ã«å ¥ã£ããšãã«1åã ãçºçããŸãã`pointerover`ãšã¯ç°ãªããè€æ°åçºçããå¯èœæ§ããããŸãã
- pointerleave: ãã€ã³ã¿ãŒãèŠçŽ ã®å¢çããé¢ãããšãã«çºçããŸãããã®ã€ãã³ãã¯ããã€ã³ã¿ãŒãèŠçŽ ããé¢ãããšãã«1åã ãçºçããŸãã`pointerout`ãšã¯ç°ãªããè€æ°åçºçããå¯èœæ§ããããŸãã
- gotpointercapture: èŠçŽ ããã€ã³ã¿ãŒããã£ããã£ãããšãã«çºçããŸããããã«ãããèŠçŽ ã¯ããã€ã³ã¿ãŒããã®å¢çã®å€ã«ç§»åããå Žåã§ããåŸç¶ã®ãã¹ãŠã®ãã€ã³ã¿ãŒã€ãã³ããåä¿¡ã§ããŸãã
- lostpointercapture: èŠçŽ ããã€ã³ã¿ãŒãã£ããã£ã倱ã£ããšãã«çºçããŸããããã¯ãèŠçŽ ããã£ããã£ãè§£æŸããå Žåããã€ã³ã¿ãŒããã£ã³ã»ã«ãããå ŽåããŸãã¯ãŠãŒã¶ãŒãå¥ã®èŠçŽ ãšã€ã³ã¿ã©ã¯ãããå Žåã«çºçããå¯èœæ§ããããŸãã
Pointer Eventããããã£
åPointer Eventãªããžã§ã¯ãã«ã¯ããã€ã³ã¿ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã«é¢ããæ å ±ãæäŸããããããã£ãå«ãŸããŠããŸããäŸ:
- pointerId: ãã€ã³ã¿ãŒã®äžæã®èå¥åãããã«ãããè€æ°ã®ãã€ã³ã¿ãŒãã¢ã¯ãã£ããªå ŽåïŒäŸïŒãã«ãã¿ãããžã§ã¹ãã£ãŒïŒãåã ã®ãã€ã³ã¿ãŒã远跡ã§ããŸãã
- pointerType: ãã€ã³ã¿ãŒã®ã¿ã€ãïŒãmouseãããtouchãããŸãã¯ãpenããªã©ïŒã瀺ããŸãã
- isPrimary: ãã€ã³ã¿ãŒããã©ã€ããªãã€ã³ã¿ãŒã§ãããã©ããã瀺ãããŒã«å€ãããšãã°ãã¿ããã¹ã¯ãªãŒã³ã«æåã«è§Šããæã¯éåžžããã©ã€ããªãã€ã³ã¿ãŒãšèŠãªãããŸãã
- clientX: ãã¥ãŒããŒãã«å¯Ÿãããã€ã³ã¿ãŒã®æ°Žå¹³åº§æšã
- clientY: ãã¥ãŒããŒãã«å¯Ÿãããã€ã³ã¿ãŒã®åçŽåº§æšã
- screenX: ç»é¢ã«å¯Ÿãããã€ã³ã¿ãŒã®æ°Žå¹³åº§æšã
- screenY: ç»é¢ã«å¯Ÿãããã€ã³ã¿ãŒã®åçŽåº§æšã
- pageX: ããã¥ã¡ã³ãå šäœã«å¯Ÿãããã€ã³ã¿ãŒã®æ°Žå¹³åº§æšã
- pageY: ããã¥ã¡ã³ãå šäœã«å¯Ÿãããã€ã³ã¿ãŒã®åçŽåº§æšã
- offsetX: ã¿ãŒã²ããèŠçŽ ã«å¯Ÿãããã€ã³ã¿ãŒã®æ°Žå¹³åº§æšã
- offsetY: ã¿ãŒã²ããèŠçŽ ã«å¯Ÿãããã€ã³ã¿ãŒã®åçŽåº§æšã
- width: ãã€ã³ã¿ãŒã®æ¥è§Šãžãªã¡ããªã®å¹ ã
- height: ãã€ã³ã¿ãŒã®æ¥è§Šãžãªã¡ããªã®é«ãã
- pressure: ãã€ã³ã¿ãŒã®æ£èŠåãããå§åããã®å€ã®ç¯å²ã¯0ãã1ã§ã1ã¯æå€§å§åã衚ããŸããããã¯éåžžããã³ã§äœ¿çšãããŸãã
- tiltX: X軞ãäžå¿ãšãããã€ã³ã¿ãŒã®åŸæè§åºŠïŒåºŠåäœïŒã
- tiltY: Y軞ãäžå¿ãšãããã€ã³ã¿ãŒã®åŸæè§åºŠïŒåºŠåäœïŒã
- twist: ãã€ã³ã¿ãŒã®æèšåãã®å転ïŒåºŠåäœïŒã
- button: æŒãããããŠã¹ãã¿ã³ã瀺ããŸãã
- buttons: çŸåšæŒãããŠããããŠã¹ãã¿ã³ã瀺ãããããã¹ã¯ã
Pointer Events APIã®äœ¿çšã«é¢ããå®çšçãªäŸ
ãŠã§ãéçºã§Pointer Events APIã䜿çšããããã€ãã®å®çšçãªäŸãèŠãŠã¿ãŸãããã
äŸ1ïŒã·ã³ãã«ãªãã©ãã°ã¢ã³ããããã
ãã®äŸã§ã¯ãPointer Events APIã䜿çšããŠãã·ã³ãã«ãªãã©ãã°ã¢ã³ãããããæ©èœãå®è£ ããæ¹æ³ã瀺ããŸãã
const element = document.getElementById('draggable-element');
let isDragging = false;
let offsetX, offsetY;
element.addEventListener('pointerdown', (event) => {
isDragging = true;
offsetX = event.clientX - element.offsetLeft;
offsetY = event.clientY - element.offsetTop;
element.setPointerCapture(event.pointerId);
});
document.addEventListener('pointermove', (event) => {
if (!isDragging) return;
element.style.left = event.clientX - offsetX + 'px';
element.style.top = event.clientY - offsetY + 'px';
});
document.addEventListener('pointerup', (event) => {
isDragging = false;
element.releasePointerCapture(event.pointerId);
});
document.addEventListener('pointercancel', (event) => {
isDragging = false;
element.releasePointerCapture(event.pointerId);
});
ãã®äŸã§ã¯ãpointerdown
ã€ãã³ãããªãã¹ã³ããŠãã©ãã°ããã»ã¹ãéå§ããŸããæ¬¡ã«ãpointermove
ã€ãã³ãããªãã¹ã³ããŠããã€ã³ã¿ãŒã®åº§æšã«åºã¥ããŠèŠçŽ ã®äœçœ®ãæŽæ°ããŸããæåŸã«ãpointerup
ããã³pointercancel
ã€ãã³ãããªãã¹ã³ããŠããã©ãã°ããã»ã¹ã忢ããŸãã
äŸ2ïŒæç»ã¢ããªã±ãŒã·ã§ã³
ãã®äŸã§ã¯ãPointer Events APIã䜿çšããŠãã·ã³ãã«ãªæç»ã¢ããªã±ãŒã·ã§ã³ãäœæããæ¹æ³ã瀺ããŸãã
const canvas = document.getElementById('drawing-canvas');
const ctx = canvas.getContext('2d');
let isDrawing = false;
canvas.addEventListener('pointerdown', (event) => {
isDrawing = true;
ctx.beginPath();
ctx.moveTo(event.offsetX, event.offsetY);
canvas.setPointerCapture(event.pointerId);
});
canvas.addEventListener('pointermove', (event) => {
if (!isDrawing) return;
ctx.lineTo(event.offsetX, event.offsetY);
ctx.stroke();
});
canvas.addEventListener('pointerup', (event) => {
isDrawing = false;
canvas.releasePointerCapture(event.pointerId);
});
canvas.addEventListener('pointercancel', (event) => {
isDrawing = false;
canvas.releasePointerCapture(event.pointerId);
});
ãã®äŸã§ã¯ãpointerdown
ã€ãã³ãããªãã¹ã³ããŠãã¹ã®æç»ãéå§ããŸããæ¬¡ã«ãpointermove
ã€ãã³ãããªãã¹ã³ããŠããã€ã³ã¿ãŒã®åº§æšã«åºã¥ããŠç·ãæç»ããŸããæåŸã«ãpointerup
ããã³pointercancel
ã€ãã³ãããªãã¹ã³ããŠããã¹ã®æç»ã忢ããŸãã
äŸ3ïŒãã³ã®å§åã®åŠç
ãã®äŸã§ã¯ãPointer Eventsã®pressure
ããããã£ã䜿çšããŠããã³ã§æç»ãããç·ã®å¹
ãå€åãããæ¹æ³ã瀺ããŸãã
const canvas = document.getElementById('drawing-canvas');
const ctx = canvas.getContext('2d');
let isDrawing = false;
canvas.addEventListener('pointerdown', (event) => {
isDrawing = true;
ctx.beginPath();
ctx.moveTo(event.offsetX, event.offsetY);
canvas.setPointerCapture(event.pointerId);
});
canvas.addEventListener('pointermove', (event) => {
if (!isDrawing) return;
const pressure = event.pressure;
ctx.lineWidth = pressure * 10; // Adjust the multiplier for desired thickness
ctx.lineTo(event.offsetX, event.offsetY);
ctx.stroke();
});
canvas.addEventListener('pointerup', (event) => {
isDrawing = false;
canvas.releasePointerCapture(event.pointerId);
});
canvas.addEventListener('pointercancel', (event) => {
isDrawing = false;
canvas.releasePointerCapture(event.pointerId);
});
ããã§ã¯ã`pressure`ããããã£ã`lineWidth`ã«çŽæ¥åœ±é¿ãäžããç¹ã«æå§ãã³ã䜿çšããå Žåã«ããã衚çŸåè±ãã§èªç¶ãªæç»äœéšãäœæããŸãã
Pointer Events APIã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
- `setPointerCapture`ãš`releasePointerCapture`ã䜿çšãã: ãããã®ã¡ãœããã¯ããã€ã³ã¿ãŒããã®å¢çã®å€ã«ç§»åããå Žåã§ããèŠçŽ ãåŸç¶ã®ãã¹ãŠã®ãã€ã³ã¿ãŒã€ãã³ããåä¿¡ããããšãä¿èšŒããããã«éèŠã§ããããã¯ããã©ãã°ã¢ã³ãããããã€ã³ã¿ã©ã¯ã·ã§ã³ãæç»ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠç¹ã«éèŠã§ãã
- `pointercancel`ã€ãã³ããåŠçãã: ãããã®ã€ãã³ãã¯äºæããçºçããå¯èœæ§ããããããäºæããªãåäœãé²ãããã«é©åã«åŠçããããšãéèŠã§ãã
- `pointerType`ããããã£ã確èªãã: ããŸããŸãªãã€ã³ã¿ãŒã¿ã€ããç°ãªãæ¹æ³ã§åŠçããå¿
èŠãããå Žåã¯ã
pointerType
ããããã£ã䜿çšããŠãããŠã¹ãã¿ãããããã³ãã³ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãåºå¥ã§ããŸãã - ã¢ã¯ã»ã·ããªãã£ãèæ ®ãã: å®è£ ãé害ã®ãããŠãŒã¶ãŒã«ãšã£ãŠã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŸããããšãã°ããã€ã³ã¿ãŒããŒã¹ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã®ããŒããŒãä»£æ¿ææ®µãæäŸããŸãã
ãã©ãŠã¶ã®äºææ§
Pointer Events APIã¯ãChromeãFirefoxãSafariãEdgeãªã©ã®ææ°ã®ãã©ãŠã¶å šäœã§åªãããã©ãŠã¶ãµããŒããæäŸããŠããŸãããã ããCan I useãªã©ã®ãªãœãŒã¹ã§ææ°ã®ãã©ãŠã¶äºææ§æ å ±ã確èªããŠãã³ãŒããããŸããŸãªãã©ãããã©ãŒã ã§æåŸ ã©ããã«åäœããããšãåžžã«ç¢ºèªããããšããå§ãããŸãã
åºæ¬ãè¶ ããŠïŒé«åºŠãªãã¯ããã¯
ãã«ãã¿ãããžã§ã¹ãã£ã®å®è£
Pointer Events APIã¯ããã«ãã¿ãããžã§ã¹ãã£ã®åŠçã«åªããŠããŸãã`pointerId`å€ã远跡ããããšã«ãããåã ã®ã¿ãããã€ã³ãã管çãããã³ãã㌠ãºãŒã ãå転ããã³ãªã©ã®è€éãªã€ã³ã¿ã©ã¯ã·ã§ã³ãå®è£ ã§ããŸãã
ããšãã°ãç»åã«ãã³ãã㌠ãºãŒã ãå®è£ ããããšãæ€èšããŠãã ããã
const image = document.getElementById('zoomable-image');
let pointers = new Map();
let initialDistance = 0;
let initialScale = 1;
image.addEventListener('pointerdown', (event) => {
pointers.set(event.pointerId, event);
if (pointers.size === 2) {
initialDistance = getDistance(pointers);
initialScale = currentScale;
}
image.setPointerCapture(event.pointerId);
});
image.addEventListener('pointermove', (event) => {
pointers.set(event.pointerId, event);
if (pointers.size === 2) {
const currentDistance = getDistance(pointers);
const scaleFactor = currentDistance / initialDistance;
currentScale = initialScale * scaleFactor;
image.style.transform = `scale(${currentScale})`;
}
});
image.addEventListener('pointerup', (event) => {
pointers.delete(event.pointerId);
if (pointers.size < 2) {
initialDistance = 0;
}
image.releasePointerCapture(event.pointerId);
});
image.addEventListener('pointercancel', (event) => {
pointers.delete(event.pointerId);
if (pointers.size < 2) {
initialDistance = 0;
}
image.releasePointerCapture(event.pointerId);
});
function getDistance(pointers) {
const [pointer1, pointer2] = pointers.values();
const dx = pointer1.clientX - pointer2.clientX;
const dy = pointer1.clientY - pointer2.clientY;
return Math.sqrt(dx * dx + dy * dy);
}
ãã®ã³ãŒãã¹ããããã¯ãè€æ°ã®ãã€ã³ã¿ãŒã远跡ãããããã®éã®è·é¢ãèšç®ããŠããã³ãã㌠ãºãŒã ãžã§ã¹ãã£ãå®è£ ããæ¹æ³ã瀺ããŠããŸãã`getDistance`颿°ã¯ã2ã€ã®ãã€ã³ã¿ãŒåº§æšéã®ãŠãŒã¯ãªããè·é¢ãèšç®ããŸãã
ã¿ããããã€ã¹ã§ã®ãããŒãšãã§ã¯ãã®åŠç
åŸæ¥ããããŒãšãã§ã¯ãã¯ããŠã¹ã€ã³ã¿ã©ã¯ã·ã§ã³ã«éå®ãããŠããŸãããPointer Events APIã䜿çšãããšã`pointerenter`ããã³`pointerleave`ã€ãã³ãã䜿çšããŠãã¿ããããã€ã¹ã§ãããŒãšãã§ã¯ããã·ãã¥ã¬ãŒãã§ããŸãã
const element = document.getElementById('hoverable-element');
element.addEventListener('pointerenter', () => {
element.classList.add('hovered');
});
element.addEventListener('pointerleave', () => {
element.classList.remove('hovered');
});
ãã®ã³ãŒãã¯ããã€ã³ã¿ãŒããã®å¢çå ã«å ¥ããšèŠçŽ ã«ãhoveredãã¯ã©ã¹ã远å ãããã€ã³ã¿ãŒãé¢ãããšãããåé€ããããšã«ãããã¿ããããã€ã¹ã§ãããŒãšãã§ã¯ãã广çã«ã·ãã¥ã¬ãŒãããŸãã
ã°ããŒãã«ãªèæ ®äºé ãšæåçãªãã¥ã¢ã³ã¹
Pointer Eventsãå®è£ ããå Žåãç¹ã«ã°ããŒãã«ãªãŒãã£ãšã³ã¹åãã®å Žåãæåçãªãã¥ã¢ã³ã¹ãšã¢ã¯ã»ã·ããªãã£æšæºãèæ ®ããããšãéèŠã§ãã
- å ¥åããã€ã¹ã®æ®å: äžéšã®å°åã§ã¯ãåŸæ¥ã®ããŠã¹ãããã¿ããããŒã¹ã®ããã€ã¹ã®æ¹ãæ®åããŠããŸããã¿ããã€ã³ã¿ã©ã¯ã·ã§ã³ãåªå ããªãããããŠã¹ã®äºææ§ã確ä¿ããããã«ã€ã³ã¿ãŒãã§ãŒã¹ãèšèšããŸãã
- ã¢ã¯ã»ã·ããªãã£: é害ã®ãããŠãŒã¶ãŒã®ããã«ãåžžã«ä»£æ¿å ¥åæ¹æ³ãæäŸããŠãã ãããããŒããŒãããã²ãŒã·ã§ã³ãšã¹ã¯ãªãŒã³ãªãŒããŒã®äºææ§ã¯äžå¯æ¬ ã§ãã
- ãã±ãŒã«åºæã®ãžã§ã¹ãã£: æåçã«åºæã®ãžã§ã¹ãã£ãŸãã¯ã€ã³ã¿ã©ã¯ã·ã§ã³ãã¿ãŒã³ã«æ³šæããŠãã ãããçŽæçãªãŠãŒã¶ããªãã£ãä¿èšŒããããã«ãããŸããŸãªããã¯ã°ã©ãŠã³ããæã€ãŠãŒã¶ãŒã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããŸãã
çµè«
Pointer Events APIã¯ãããŸããŸãªããã€ã¹ããã®å ¥åãåŠçããããã®åŒ·åã§çµ±äžãããã¢ãããŒããæäŸããŸãããã®APIãæ¡çšããããšã«ããããŠã§ãéçºè ã¯ã³ãŒããç°¡çŽ åããã¯ãã¹ããã€ã¹äºææ§ãåäžãããããé åçã§ã¢ã¯ã»ã¹å¯èœãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœæã§ããŸãããŠã§ããé²åãç¶ããæ°ããå ¥åããã€ã¹ãç»å Žããã«ã€ããŠãPointer Events APIã¯ãææ°ã®å¿çæ§ã®é«ããŠã§ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®äžå¯æ¬ ãªããŒã«ã§ããç¶ããŸãã
Pointer Events APIã®ã³ã¢ã³ã³ã»ãããã€ãã³ãã¿ã€ããããã³ããããã£ãçè§£ããããšã§ããŠã§ãéçºãããžã§ã¯ãã§æ°ããã¬ãã«ã®å¶åŸ¡ãšæè»æ§ãå®çŸã§ããŸãã仿¥ããAPIã®å®éšãéå§ããå ¥åããã€ã¹åŠçãžã®çµ±äžãããã¢ãããŒãã®å©ç¹ãçºèŠããŠãã ããã