æéäºä»¶ï¼Pointer Eventsï¼æ¯ä¸ç§ç¨äºå¤çæ¥èªåç§è¾å ¥è®¾å¤ï¼ä¾å¦é¼ æ ã触æ§ç¬å触æ¸å±çï¼çè¾å ¥ä¿¡æ¯çç°ä»£åè§£å³æ¹æ¡ã
䏿®µç®å²
让æä»¬å åä¸ä¸ªç®ççæ¦è§ï¼ä»¥ä¾¿ä½ 对æéäºä»¶åå ¶å¨å ¶å®äºä»¶ç±»å䏿å¤ä½ç½®æä¸ªç²ç¥è®¤è¯ã
-
徿©ä»¥åï¼åªåå¨é¼ æ äºä»¶ã
忥ï¼è§¦å±è®¾å¤å¼å§æ®åï¼å°¤å ¶æ¯ææºåå¹³æ¿çµèã为äºä½¿ç°æçèæ¬ä»è½æ£å¸¸å·¥ä½ï¼å®ä»¬çæï¼ç°å¨ä»çæï¼é¼ æ äºä»¶ãä¾å¦ï¼è½»è§¦å±å¹å°±ä¼çæ
mousedownäºä»¶ãå æ¤ï¼è§¦æ¸è®¾å¤å¯ä»¥å¾å¥½å°ä¸ç½é¡µé å使ç¨ã使¯ï¼è§¦æ¸è®¾å¤æ¯é¼ æ å ·ææ´å¤çåè½ãä¾å¦ï¼æä»¬å¯ä»¥åæ¶è§¦æ§å¤ç¹ï¼å¤ç¹è§¦æ§ï¼ãç¶èï¼é¼ æ äºä»¶å¹¶æ²¡æç¸å ³å±æ§æ¥å¤çè¿ç§å¤ç¹è§¦æ§ã
-
å æ¤ï¼å¼å ¥äºè§¦æ¸äºä»¶ï¼ä¾å¦
touchstartãtouchendåtouchmoveï¼å®ä»¬å ·æç¹å®äºè§¦æ¸ç屿§ï¼è¿éä¸åèµè¿°è¿äºç¹æ§ï¼å 为æéäºä»¶æ´å å®åï¼ãä¸è¿è¿è¿æ¯ä¸å¤å®ç¾ãå 为å¾å¤å ¶ä»è¾å ¥è®¾å¤ï¼å¦è§¦æ§ç¬ï¼é½æèªå·±çç¹æ§ãèä¸åæ¶ç»´æ¤ä¸¤ä»½åå«å¤çé¼ æ äºä»¶å触æ¸äºä»¶ç代ç ï¼æ¾å¾æäºç¬¨éäºã
-
为äºè§£å³è¿äºé®é¢ï¼äººä»¬å¼å ¥äºå ¨æ°çè§èãæéäºä»¶ããå®ä¸ºåç§æéè¾å ¥è®¾å¤æä¾äºä¸å¥ç»ä¸çäºä»¶ã
ç®åï¼åå¤§ä¸»æµæµè§å¨å·²ç»æ¯æäº Pointer Events Level 2 æ åï¼çæ¬æ´æ°ç Pointer Events Level 3 å·²ç»åå¸ï¼å¹¶ä¸å¤§å¤æ°æ åµä¸ä¸ Pointer Events Level 2 å ¼å®¹ã
å æ¤ï¼é¤éä½ åç代ç éè¦å ¼å®¹æ§çæ¬çæµè§å¨ï¼ä¾å¦ IE 10 æ Safari 12 ææ´ä½ççæ¬ï¼å¦åæ éç»§ç»ä½¿ç¨é¼ æ äºä»¶æè§¦æ¸äºä»¶ ââ æä»¬å¯ä»¥ä½¿ç¨æéäºä»¶ã
è¿æ ·ï¼ä½ ç代ç å°±å¯ä»¥å¨è§¦æ¸è®¾å¤åé¼ æ 设å¤ä¸é½è½æ£å¸¸å·¥ä½äºã
è¯è½å¦æ¤ï¼æéäºä»¶ä»ç¶æä¸äºéè¦ç奿ªç¹æ§ï¼ä½ åºå½å¯¹å®ä»¬ææäºè§£ä»¥æ£ç¡®ä½¿ç¨æéäºä»¶ï¼å¹¶é¿å ä¸äºææä¹å¤çé误ãæä»¬å°å¨æ¬æä¸å¯¹å®ä»¬è¿è¡ä»ç»ã
æéäºä»¶ç±»å
æéäºä»¶çå½åæ¹å¼åé¼ æ äºä»¶ç±»ä¼¼ï¼
| æéäºä»¶ | 类似çé¼ æ äºä»¶ |
|---|---|
pointerdown |
mousedown |
pointerup |
mouseup |
pointermove |
mousemove |
pointerover |
mouseover |
pointerout |
mouseout |
pointerenter |
mouseenter |
pointerleave |
mouseleave |
pointercancel |
- |
gotpointercapture |
- |
lostpointercapture |
- |
ä¸é¾åç°ï¼æ¯ä¸ä¸ª mouse<event> 齿ä¸ä¹ç¸å¯¹åºç pointer<event>ãåæ¶è¿æ 3 个é¢å¤çäºä»¶æ²¡æç¸åºç mouse...ï¼æä»¬ä¼å¨ç¨å详ç»è§£éå®ä»¬ã
pointer<event> æ¿æ¢ mouse<event>æä»¬å¯ä»¥æä»£ç ä¸ç mouse<event> 齿¿æ¢æ pointer<event>ï¼ç¨åºä»ç¶æ£å¸¸å
¼å®¹é¼ æ 设å¤ã
æ¿æ¢ä¹åï¼ç¨åºå¯¹è§¦å±è®¾å¤çæ¯æä¼âéæ³è¬âå°æåã使¯ï¼æä»¬å¯è½éè¦å¨ CSS ä¸çæäºå°æ¹æ·»å touch-action: noneãæä»¬ä¼å¨ä¸æç pointercancel ä¸èä¸æè¿°è¿éé¢çç»èã
æéäºä»¶å±æ§
æéäºä»¶å
·å¤åé¼ æ äºä»¶å®å
¨ç¸åç屿§ï¼å
æ¬ clientX/Y å target çï¼ä»¥åä¸äºå
¶ä»å±æ§ï¼
-
pointerIdââ 触åå½åäºä»¶çæéå¯ä¸æ è¯ç¬¦ãæµè§å¨çæçã使æä»¬è½å¤å¤ç夿éçæ åµï¼ä¾å¦å¸¦æè§¦æ§ç¬åå¤ç¹è§¦æ§åè½ç触æ¸å±ï¼ä¸æä¼æç¸å ³ç¤ºä¾ï¼ã
-
pointerTypeââ æéç设å¤ç±»åãå¿ é¡»ä¸ºå符串ï¼å¯ä»¥æ¯ï¼âmouseâãâpenâ æ âtouchâãæä»¬å¯ä»¥ä½¿ç¨è¿ä¸ªå±æ§æ¥é对ä¸åç±»åçæéè¾å ¥ååºä¸åååºã
-
isPrimaryââ 彿é为é¦è¦æéï¼å¤ç¹è§¦æ§æ¶æä¸çç¬¬ä¸æ ¹ææï¼æ¶ä¸ºtrueã
æäºæé设å¤ä¼æµéæ¥è§¦é¢ç§¯åç¹æååï¼ä¾å¦ä¸æ ¹ææåå¨è§¦å±ä¸ï¼ï¼å¯¹äºè¿ç§æ åµå¯ä»¥ä½¿ç¨ä»¥ä¸å±æ§ï¼
widthââ æéï¼ä¾å¦ææï¼æ¥è§¦è®¾å¤çåºåç宽度ã对äºä¸æ¯æç设å¤ï¼å¦é¼ æ ï¼ï¼è¿ä¸ªå¼æ»æ¯1ãheightââ æéï¼ä¾å¦ææï¼æ¥è§¦è®¾å¤çåºåçé¿åº¦ã对äºä¸æ¯æç设å¤ï¼è¿ä¸ªå¼æ»æ¯1ãpressureââ 触æ¸ååï¼æ¯ä¸ä¸ªä»äº 0 å° 1 ä¹é´çæµ®ç¹æ°ã对äºä¸æ¯æå忣æµç设å¤ï¼è¿ä¸ªå¼æ»æ¯0.5ï¼æä¸æ¶ï¼æ0ãtangentialPressureââ å½ä¸ååçååååï¼tangential pressureï¼ãtiltX,tiltY,twistââ é对触æ¸ç¬çå ä¸ªå±æ§ï¼ç¨äºæè¿°ç¬åå±å¹è¡¨é¢çç¸å¯¹ä½ç½®ã
大夿°è®¾å¤é½ä¸æ¯æè¿äºå±æ§ï¼å æ¤å®ä»¬å¾å°è¢«ä½¿ç¨ãå¦æä½ éè¦ä½¿ç¨å®ä»¬ï¼å¯ä»¥å¨ è§èææ¡£ 䏿¥çæ´å¤æå ³å®ä»¬ç详ç»ä¿¡æ¯ã
å¤ç¹è§¦æ§
å¤ç¹è§¦æ§ï¼ç¨æ·å¨ææºæå¹³æ¿ä¸åæ¶ç¹å»è¥å¹²ä¸ªä½ç½®ï¼ææ§è¡ç¹æ®æå¿ï¼æ¯é¼ æ äºä»¶å®å ¨ä¸æ¯æçåè½ä¹ä¸ã
æéäºä»¶ä½¿æä»¬è½å¤éè¿ pointerId å isPrimary 屿§ç帮å©ï¼è½å¤å¤çå¤ç¹è§¦æ§ã
å½ç¨æ·ç¨ä¸æ ¹ææè§¦æ¸è§¦æ¸å±çæä¸ªä½ç½®ï¼ç¶åå°å¦ä¸æ ¹æææ¾å¨è¯¥è§¦æ¸å±çå ¶ä»ä½ç½®æ¶ï¼ä¼åç以䏿 åµï¼
- 第ä¸ä¸ªææè§¦æ¸ï¼
pointerdownäºä»¶è§¦åï¼isPrimary=trueï¼å¹¶ä¸è¢«ææ´¾äºä¸ä¸ªpointerIdã
- 第äºä¸ªååç»çæ´å¤ä¸ªææè§¦æ¸ï¼å设第ä¸ä¸ªææä»å¨è§¦æ¸ï¼ï¼
pointerdownäºä»¶è§¦åï¼isPrimary=falseï¼å¹¶ä¸æ¯ä¸ä¸ªè§¦æ¸é½è¢«ææ´¾äºä¸åçpointerIdã
请注æï¼pointerId 䏿¯åé
ç»æ´ä¸ªè®¾å¤çï¼èæ¯åé
ç»æ¯ä¸ä¸ªè§¦æ¸çã妿 5 æ ¹ææåæ¶è§¦æ¸å±å¹ï¼æä»¬ä¼å¾å° 5 个 pointerdown äºä»¶åç¸åºçåæ ä»¥å 5 个ä¸åç pointerIdã
å第ä¸ä¸ªè§¦æ¸ç¸å
³èçäºä»¶æ»æ isPrimary=trueã
å©ç¨ pointerIdï¼æä»¬å¯ä»¥è¿½è¸ªå¤æ ¹æ£å¨è§¦æ¸å±å¹çææãå½ç¨æ·ç§»å¨ææ¬èµ·ææ ¹æææ¶ï¼æä»¬ä¼å¾å°å pointerdown äºä»¶å
·æç¸å pointerId ç pointermove æ pointerup äºä»¶ã
è¿æ¯ä¸ä¸ªè®°å½ pointerdown å pointerup äºä»¶çæ¼ç¤º:
请注æï¼ä½ 使ç¨çå¿
é¡»æ¯ä¸ä¸ªå¤ç¹è§¦æ§è®¾å¤ï¼å¦å¹³æ¿æææºï¼æè½å¨ pointerId/isPrimary ä¸çå°åºå«ã对äºä½¿ç¨é¼ æ è¿æ ·çåç¹è§¦æ§è®¾å¤ï¼æææéäºä»¶é½ä¼å
·æç¸åç pointerId å isPrimary=true 屿§ã
äºä»¶ï¼pointercancel
pointercancel äºä»¶å°ä¼å¨ä¸ä¸ªæ£å¤äºæ´»è·ç¶æçæé交äºç±äºæäºåå è¢«ä¸ææ¶è§¦åãä¹å°±æ¯å¨è¿ä¸ªäºä»¶ä¹åï¼è¯¥æéå°±ä¸ä¼ç»§ç»è§¦åæ´å¤äºä»¶äºã
å¯¼è´æé䏿çå¯è½åå å¦ä¸ï¼
- æé设å¤ç¡¬ä»¶å¨ç©çå±é¢ä¸è¢«ç¦ç¨ã
- è®¾å¤æ¹åæè½¬ï¼ä¾å¦ç»å¹³æ¿è½¬äºä¸ªæ¹åï¼ã
- æµè§å¨æç®èªè¡å¤çè¿ä¸äº¤äºï¼æ¯å¦å°å ¶ç使¯ä¸ä¸ªä¸é¨çé¼ æ æå¿æç¼©æ¾æä½çã
æä»¬ä¼ç¨ä¸ä¸ªå®é
ä¾åæ¥éé pointercancel çå½±åã
ä¾å¦ï¼æä»¬æ³è¦å®ç°ä¸ä¸ªå é¼ æ ææ¾äºä»¶ ä¸å¼å¤´æå°ç飿 ·çä¸ä¸ªå¯¹ççææ¾æä½ã
ç¨æ·çæä½æµå对åºçäºä»¶å¦ä¸ï¼
- ç¨æ·æä½äºä¸å¼ å¾çï¼å¼å§ææ½
pointerdownäºä»¶è§¦å
- ç¨æ·å¼å§ç§»å¨æéï¼ä»èæå¨å¾çï¼
pointermoveäºä»¶è§¦åï¼å¯è½è§¦å夿¬¡
- ç¶åææä¹å¤çæ
åµåçäºï¼æµè§å¨æèªå·±åççå¾çææ¾æä½ï¼æ¥ç®¡äºä¹åçææ¾è¿ç¨ï¼äºæ¯è§¦åäº
pointercanceläºä»¶ã- ç°å¨ææ¾å¾ççæä½ç±æµè§å¨èªè¡å®ç°ãç¨æ·çè³å¯è½ä¼æå¾çæåºæµè§å¨ï¼æ¾è¿ä»ä»¬çé®ä»¶ç¨åºææä»¶ç®¡çå¨ã
- æä»¬ä¸ä¼åå¾å°
pointermoveäºä»¶äºã
è¿éçé®é¢å°±å¨äºæµè§å¨â嫿âäºè¿ä¸ä¸ªäºå¨æä½ï¼å¨âææ¾âè¿ç¨å¼å§æ¶è§¦åäº pointercancel äºä»¶ï¼å¹¶ä¸ä¸åæ pointermove äºä»¶ä¼è¢«çæã
è¿éæ¯ææ¾ç¤ºä¾çæ¼ç¤ºï¼å¹¶ä¸å¨ææ¾è¿ç¨ä¸ï¼æéäºä»¶ï¼åªå
å« up/downãmove å cancelï¼ç触åä¼è¢«è®°å½å¨ textarea ä¸ï¼
æä»¬æ³è¦å®ç°èªå·±çææ¾æä½ï¼æä»¥è®©æä»¬æ¥ççå¦ä½åè¯æµè§å¨ä¸è¦æ¥ç®¡ææ¾æä½ã
黿¢æµè§å¨çé»è®¤è¡ä¸ºæ¥é²æ¢ pointercancel 触åã
æä»¬éè¦å两件äºï¼
- 黿¢åççææ¾æä½åçï¼
- æ£å¦æä»¬å¨ é¼ æ ææ¾äºä»¶ ä¸æè¿°ç飿 ·ï¼æä»¬å¯ä»¥éè¿è®¾ç½®
ball.ondragstart = () => falseæ¥å®ç°è¿ä¸éæ±ã - è¿ç§æ¹å¼ä¹éç¨äºé¼ æ äºä»¶ã
- æ£å¦æä»¬å¨ é¼ æ ææ¾äºä»¶ ä¸æè¿°ç飿 ·ï¼æä»¬å¯ä»¥éè¿è®¾ç½®
- 对äºè§¦å±è®¾å¤ï¼è¿æå
¶ä»å触æ¸ç¸å
³çæµè§å¨è¡ä¸ºï¼é¤äºææ¾ï¼ã为äºé¿å
å®ä»¬æå¼åçé®é¢ï¼
- æä»¬å¯ä»¥éè¿å¨ CSS ä¸è®¾ç½®
#ball { touch-action: none }æ¥é»æ¢å®ä»¬ã - ä¹åæä»¬ç代ç 便å¯ä»¥å¨è§¦å±è®¾å¤ä¸æ£å¸¸å·¥ä½äºã
- æä»¬å¯ä»¥éè¿å¨ CSS ä¸è®¾ç½®
ç»è¿ä¸è¿°æä½ï¼äºä»¶å°ä¼æç
§æä»¬é¢æçæ¹å¼è§¦åï¼æµè§å¨ä¸ä¼å«æææ¾è¿ç¨ï¼ä¹ä¸ä¼è§¦å pointercancel äºä»¶ã
è¿ä¸ªæ¼ç¤ºå¢å äºä»¥ä¸å è¡ï¼
å¯ä»¥çå°ï¼pointercancel äºä»¶ä¸å被触åã
ç°å¨æä»¬å°±å¯ä»¥æ·»å 让ççä½ç½®ç§»å¨ç代ç äºï¼å¹¶ä¸æä»¬ç代ç å¯¹é¼ æ å触æ§è®¾å¤é½ææã
æéæè·
æéæè·ï¼Pointer capturingï¼æ¯é对æéäºä»¶çä¸ä¸ªç¹æ§ã
è¿ä¸ªæ³æ³å¾ç®åï¼ä½æ¯ä¹ä¸çå¯è½æè§å¾å¥æªï¼å 为å¨å ¶ä»ä»»ä½äºä»¶ç±»åä¸é½æ²¡æè¿ç§ä¸è¥¿ã
主è¦çæ¹æ³æ¯ï¼
elem.setPointerCapture(pointerId)ââ å°ç»å®çpointerIdç»å®å°elemãå¨è°ç¨ä¹åï¼ææå ·æç¸åpointerIdçæéäºä»¶é½å°elemä½ä¸ºç®æ ï¼å°±åäºä»¶åçå¨elemä¸ä¸æ ·ï¼ï¼æ 论è¿äºelemå¨ææ¡£ä¸çå®é ä½ç½®æ¯ä»ä¹ã
æ¢å¥è¯è¯´ï¼elem.setPointerCapture(pointerId) å°ææå
·æç»å® pointerId çåç»äºä»¶éæ°å®ä½å° elemã
ç»å®ä¼å¨ä»¥ä¸æ åµä¸è¢«ç§»é¤ï¼
- å½
pointerupæpointercanceläºä»¶åºç°æ¶ï¼ç»å®ä¼è¢«èªå¨å°ç§»é¤ã - å½
elemè¢«ä»ææ¡£ä¸ç§»é¤åï¼ç»å®ä¼è¢«èªå¨å°ç§»é¤ã - å½
elem.releasePointerCapture(pointerId)被è°ç¨ï¼ç»å®ä¼è¢«ç§»é¤ã
é£ä¹ï¼å®æä»ä¹ç¨ï¼æä»¬ä¸èµ·æ¥çä¸ä¸ªå®é çä¾åå§ã
æéæè·å¯ä»¥è¢«ç¨äºç®åææ¾ç±»ç交äºã
让æä»¬æ¥åå¿ä¸ä¸å¨ é¼ æ ææ¾äºä»¶ 䏿å°çï¼å¦ä½å®ç°ä¸ä¸ªèªå®ä¹æ»å¨æ¡ã
æä»¬å¯ä»¥å建ä¸ä¸ªå¸¦ææ¡å½¢å¾çãå¹¶ä¸å
鍿ä¸ä¸ªâæ»åâï¼thumbï¼çæ»å¨æ¡å
ç´ ï¼sliderï¼ï¼
<div class="slider">
<div class="thumb"></div>
</div>
æ·»å æ ·å¼åçææå¦ä¸ï¼
ç¨æéäºä»¶æ¿æ¢é¼ æ äºä»¶åçå®ç°é»è¾ï¼
- ç¨æ·æä¸æ»å¨æ¡çæ»å
thumbââpointerdownäºä»¶è¢«è§¦åã - ç¶åç¨æ·ç§»å¨æé ââ
pointermoveäºä»¶è¢«è§¦åï¼æä»¬è®©ç§»å¨äºä»¶åªä½ç¨å¨thumbä¸ã- â¦â¦å¨æéçç§»å¨è¿ç¨ä¸ï¼æéå¯è½ä¼ç¦»å¼æ»å¨æ¡ç
thumbå ç´ ï¼ç§»å¨å°thumbä¹ä¸æä¹ä¸çä½ç½®ãèthumbåºè¯¥ä¸¥æ ¼å¨æ°´å¹³æ¹åä¸ç§»å¨ï¼å¹¶ä¸æéä¿æå¯¹é½ã
- â¦â¦å¨æéçç§»å¨è¿ç¨ä¸ï¼æéå¯è½ä¼ç¦»å¼æ»å¨æ¡ç
å¨åºäºé¼ æ äºä»¶å®ç°çæ¹æ¡ä¸ï¼è¦è·è¸ªæéçææç§»å¨ï¼å
æ¬æéç§»å¨å° thumb ä¹ä¸æä¹ä¸çä½ç½®æ¶ï¼æä»¬å¿
须卿´ä¸ªææ¡£ document ä¸åé
mousemove äºä»¶å¤çç¨åºã
ä¸è¿ï¼è¿å¹¶ä¸æ¯ä¸ä¸ªæ²¡æå¯ä½ç¨çè§£å³æ¹æ¡ãå
¶ä¸çä¸ä¸ªé®é¢å°±æ¯ï¼æéå¨ææ¡£å¨å´çç§»å¨å¯è½ä¼å¼èµ·å¯ä½ç¨ï¼å¨å
¶ä»å
ç´ ä¸è§¦åäºä»¶å¤çç¨åºï¼ä¾å¦ mouseoverï¼å¹¶è°ç¨å
¶ä»å
ç´ ä¸ä¸æ»å¨æ¡ä¸ç¸å
³çåè½ï¼è¿ä¸æ¯æä»¬é¢æçææã
è¿å°±æ¯ setPointerCapture éç¨çåºæ¯ã
- æä»¬å¯ä»¥å¨
pointerdownäºä»¶çå¤çç¨åºä¸è°ç¨thumb.setPointerCapture(event.pointerId)ï¼ - è¿æ ·æ¥ä¸æ¥å¨
pointerup/cancelä¹ååççæææéäºä»¶é½ä¼è¢«éå®åå°thumbä¸ã - å½
pointerupåçæ¶ï¼æå¨å®æï¼ï¼ç»å®ä¼è¢«èªå¨ç§»é¤ï¼æä»¬ä¸éè¦å ³å¿å®ã
å æ¤ï¼å³ä½¿ç¨æ·å¨æ´ä¸ªææ¡£ä¸ç§»å¨æéï¼äºä»¶å¤çç¨åºä¹å°ä»
å¨ thumb ä¸è¢«è°ç¨ãå°½ç®¡å¦æ¤ï¼äºä»¶å¯¹è±¡çåæ å±æ§ï¼ä¾å¦ clientX/clientY ä»å°æ¯æ£ç¡®ç ââ æè·ä»
å½±å target/currentTargetã
主è¦ä»£ç å¦ä¸ï¼
thumb.onpointerdown = function(event) {
// ææææéäºä»¶ï¼pointerup ä¹ååççï¼éå®åå° thumb
thumb.setPointerCapture(event.pointerId);
// å¼å§è·è¸ªæéçç§»å¨
thumb.onpointermove = function(event) {
// ç§»å¨æ»å¨æ¡ï¼å¨ thumb ä¸çå¬å³å¯ï¼å ä¸ºæææéäºä»¶é½è¢«éå®åå°äº thumb
let newLeft = event.clientX - slider.getBoundingClientRect().left;
thumb.style.left = newLeft + 'px';
};
// å½ç»æ(pointerup)æ¶åæ¶å¯¹æéç§»å¨çè·è¸ª
thumb.onpointerup = function(event) {
thumb.onpointermove = null;
thumb.onpointerup = null;
// ...è¿éè¿å¯ä»¥å¤çâæå¨ç»æâç¸å
³çé»è¾
};
};
// 注æï¼æ éè°ç¨ thumb.releasePointerCaptureï¼
// å®ä¼å¨ pointerup æ¶è¢«èªå¨è°ç¨
宿´ç¤ºä¾ï¼
å¨è¿ä¸ª demo ä¸è¿æä¸ä¸ªå
ç´ ï¼å½å®ç onmouseover å¤çç¨åºè¢«è§¦åæ¶ä¼æ¾ç¤ºå½åçæ¶é´ã
请注æï¼å½ä½ æå¨æ»åçæ¶åï¼é¼ æ å¯è½ä¼æ¬åå¨è¿ä¸ªå
ç´ ä¸ï¼å®ç onmouseover å¤çç¨åºä¸ä¼è¢«è§¦åã
åå©äº setPointerCaptureï¼ç°å¨æå¨æ»åä¸ä¼å产çå¯ä½ç¨äºã
è¨èæ»ä¹ï¼æéæè·ä¸ºæä»¬å¸¦æ¥äºä¸¤ä¸ªå¥½å¤ï¼
- 代ç å徿´å ç®æ´ï¼æä»¬ä¸åéè¦å¨æ´ä¸ª
document䏿·»å /ç§»é¤å¤çç¨åºãç»å®ä¼è¢«èªå¨éæ¾ã - å¦æææ¡£ä¸æå ¶ä»æéäºä»¶å¤çç¨åºï¼åå¨ç¨æ·æå¨æ»å¨æ¡æ¶ï¼å®ä»¬ä¸ä¼å æéçç§»å¨è¢«æå¤å°è§¦åã
æéæè·äºä»¶
宿´èµ·è§ï¼è¿éè¿éè¦æåä¸ä¸ªç¥è¯ç¹ã
è¿æä¸¤ä¸ªä¸æéæè·ç¸å ³çäºä»¶ï¼
gotpointercaptureä¼å¨ä¸ä¸ªå ç´ ä½¿ç¨setPointerCaptureæ¥å¯ç¨æè·å触åãlostpointercaptureä¼å¨æè·è¢«éæ¾å触åï¼å ¶è§¦åå¯è½æ¯ç±äºreleasePointerCaptureçæ¾å¼è°ç¨ï¼ææ¯pointerup/pointercanceläºä»¶è§¦ååçèªå¨è°ç¨ã
æ»ç»
æéäºä»¶å 许æä»¬éè¿ä¸ä»½ä»£ç ï¼åæ¶å¤çé¼ æ ã触æ¸å触æ§ç¬äºä»¶ã
æéäºä»¶æ¯é¼ æ äºä»¶çæå±ãæä»¬å¯ä»¥å¨äºä»¶åç§°ä¸ç¨ pointer æ¿æ¢ mouse æ¥è®©æä»¬çä»£ç æ¢è½ç»§ç»æ¯æé¼ æ ï¼ä¹è½æ´å¥½å°æ¯æå
¶ä»ç±»åç设å¤ã
å¯¹äºæµè§å¨å¯è½ä¼å³å®è¿è¡å«æå¹¶èªè¡å¤ççææ¾å夿ç触æ§äº¤äº ââ 请记ä½åæ¶äºä»¶çé»è®¤æä½ï¼å¹¶å¨ CSS ä¸ä¸ºæ¶åå°çå
ç´ è®¾ç½® touch-action: noneã
æéäºä»¶è¿é¢å¤å ·å¤ä»¥ä¸è½åï¼
- åºäº
pointerIdåisPrimaryçå¤ç¹è§¦æ§æ¯æã - é对ç¹å®è®¾å¤ç屿§ï¼ä¾å¦
pressureåwidth/heightçã - æéæè·ï¼æä»¬å¯ä»¥æ
pointerup/pointercancelä¹åçæææéäºä»¶éå®åå°ä¸ä¸ªç¹å®çå ç´ ã
ç®åï¼æéäºä»¶å·²ç»è¢«åå¤§ä¸»æµæµè§å¨æ¯æï¼å°¤å ¶æ¯å¦æä¸éè¦æ¯æ IE10 å Safari 12 以ä¸ççæ¬ï¼æä»¬å¯ä»¥æ¾å¿å°ä½¿ç¨å®ä»¬ãä¸è¿å³ä¾¿æ¯é对è¿äºè弿µè§å¨ï¼ä¹å¯ä»¥éè¿ polyfill æ¥è®©å®ä»¬æ¯ææéäºä»¶ã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼