åæ ç³»
å¨å¾å½¢ä¸ä¸æä¸æå®åç´ çä½ç½®æ¶ï¼å°±å代æ°ä¸æå®åæ ç³»ä¸æ ·ï¼ï¼åç´ çä½ç½®æ¯ç¸å¯¹äºä¸ä¸æä¸çä¸ä¸ªåºå®ç¹å®ä¹çï¼è¿ä¸ªåºå®ç¹ç§°ä¸ºåç¹ãä½ç½®æå®ä¸ºæ²¿ä¸ä¸ææ¯ä¸ªç»´åº¦ä»åç¹åç§»çåç´ æ°ã
æ¬æåä»ç»äº CSS 对象模å使ç¨çæ ååæ ç³»ãè¿äºåæ ç³»éå¸¸åªæ¯å¨åç¹ä½ç½®ä¸ææä¸åã
维度
å¨ Web ææ¯ä½¿ç¨çåæ ç³»ä¸ï¼æç §æ¯ä¾ï¼æ°´å¹³åç§»é称为 x åæ ï¼è´å¼è¡¨ç¤ºå¨åç¹å·¦ä¾§ï¼æ£å¼è¡¨ç¤ºå¨åç¹å³ä¾§ãy åæ æå®åç´åç§»ï¼è´å¼è¡¨ç¤ºå¨åç¹ä¹ä¸ï¼æ£å¼è¡¨ç¤ºå¨åç¹ä¹ä¸ã
å¨ web ä¸ï¼é»è®¤çåç¹æ¯ç»å®ä¸ä¸æçå·¦ä¸è§ï¼Y åæ æ£å¼ä½äºåç¹ä¸æ¹ï¼ã请注æï¼è¿ä¸å¤§å¤æ°æ°å¦æ¨¡åä¸åï¼å¨å¤§å¤æ°æ°å¦æ¨¡åä¸ï¼åç¹ä½äºå·¦ä¸è§ï¼Y åæ çæ£å¼ä½äºåç¹ä¹ä¸ã
å¨ä½¿ç¨ç¬¬ä¸ç»´åº¦å°ç©ä½ä»åååå屿¶ï¼æä»¬ä½¿ç¨ z è½´ãz è½´ä»æ¥çå¨ä¸ç´å»¶ä¼¸å°å±å¹è¡¨é¢ãCSS z-index 屿§ä¼å½±åå®ä½å ç´ å¨æ¤è½´çº¿ä¸çä½ç½®ï¼ä»è产çè¿ç¦»ææåè§ä¼çææã
夿³¨ï¼å®é
ä¸ï¼ä½¿ç¨ CSS 屿§ï¼å¦ transformï¼å¯ä»¥æ¹åè¿äºåæ ç³»çå®ä¹åæ¹åãä¸è¿ï¼æä»¬ç°å¨åªè®¨è®ºæ ååæ ç³»ã
æ å CSS 对象模ååæ ç³»
CSS 对象模å使ç¨åç§æ ååæ ç³»ã为äºå¸®å©ç´è§å°çè§£è¿äºä¸»è¦åæ ç³»ï¼ä¸å¾æ¾ç¤ºäºä¸å°æ¾ç¤ºå¨ï¼æ¾ç¤ºå¨ä¸æä¸ä¸ªæµè§å¨çªå£ï¼çªå£ä¸çå 容æ»å¨å°äºè§å£ä¹å¤ãå¨è§å£å¤æ»å¨ç页é¢å 容卿µè§å¨çªå£ä¸æ¹æ¾ç¤ºä¸ºåéæï¼ä»¥æç¤ºâ页é¢âåæ çåç¹å¨åªéãâ客æ·ç«¯âãâ页é¢âåâè§å£âåæ ç³»çåç¹å·²çªåºæ¾ç¤ºã
åç§»
使ç¨âåç§»âæ¨¡åæå®çåæ ä½¿ç¨çæ¯è¢«æ£æ¥å ç´ æåçäºä»¶çå ç´ çå·¦ä¸è§ã
ä¾å¦ï¼å½åçé¼ æ äºä»¶æ¶ï¼äºä»¶ç offsetX å offsetY 屿§ä¸æå®çé¼ æ ä½ç½®ç¸å¯¹äºäºä»¶åçèç¹çå·¦ä¸è§ãåç¹çåµå
¥è·ç¦»ç± padding-left å padding-top æå®ã
è§å£
âè§å£âï¼æâ客æ·ç«¯âï¼åæ 系以åçäºä»¶çè§å£ææµè§ä¸ä¸æçå·¦ä¸è§ä¸ºåç¹ãè¿å°±æ¯åç°ææ¡£çæ´ä¸ªè§å¾åºåã
ä¾å¦ï¼å¨å°å¼çµèä¸ï¼MouseEvent.clientX å MouseEvent.clientY 屿§è¡¨ç¤ºäºä»¶åçæ¶é¼ æ å
æ ç¸å¯¹äº window å·¦ä¸è§çä½ç½®ã使ç¨è§¦æ§ç¬ææéæ¶ï¼è§¦æ¸äºä»¶ä¸ç Touch.clientX å Touch.clientY åæ ç¸å¯¹äºåä¸åç¹ã
çªå£çå·¦ä¸è§å§ç»æ¯ (0ï¼0)ï¼ä¸ææ¡£å
容æä»»ä½æ»å¨æ å
³ãæ¢å¥è¯è¯´ï¼æ»å¨ææ¡£ä¼æ¹åææ¡£ä¸ç»å®ä½ç½®çè§å£åæ ã
页é¢
â页é¢âåæ ç³»ç»åºäºä¸ä¸ªåç´ ç¸å¯¹äºæ´ä¸ªæ¸²æææ¡£å·¦ä¸è§çä½ç½®ãè¿æå³çç¨æ·å¨ææ¡£ä¸æ¨ªåæçºµåæ»å¨å ç´ åï¼é¤éå ç´ éè¿å¸å±ååç§»å¨ï¼å¦åææ¡£ä¸å ç´ çæä¸ç¹å°ä¿æç¸åçåæ ã
é¼ æ äºä»¶ç pageX å pageY 屿§æä¾äºäºä»¶åçæ¶é¼ æ ç¸å¯¹äºææ¡£å·¦ä¸è§çä½ç½®ã触æ¸äºä»¶ä¸ç Touch.pageX å Touch.pageY åæ ç¸å¯¹äºåä¸åç¹ã
å±å¹
æåï¼æ¥ä»ç»âå±å¹â模åï¼åç¹æ¯ç¨æ·å±å¹ç©ºé´çå·¦ä¸è§ãè¯¥åæ ç³»ä¸çæ¯ä¸ªç¹é½ä»£è¡¨ä¸ä¸ªé»è¾åç´ ï¼å æ¤æ¯ä¸ªåæ è½´ä¸çå¼é½ä»¥æ´æ°é墿éåãå¦æææ¡£ä¸å å«ççªå£è¢«ç§»å¨ï¼æè ç¨æ·çå±å¹å ä½å½¢ç¶åçååï¼éè¿æ¹åæ¾ç¤ºå辨çæå¨ç³»ç»ä¸æ·»å æå 餿¾ç¤ºå¨ï¼ï¼ææ¡£ä¸ç»å®ç¹çä½ç½®å°±ä¼åçååã
MouseEvent.screenX å MouseEvent.screenY 屿§ç»åºäºé¼ æ äºä»¶ç¸å¯¹äºå±å¹åç¹çä½ç½®åæ ã触æ¸äºä»¶ä¸ç Touch.screenX å Touch.screenY åæ ç¸å¯¹äºåä¸åç¹ã
示ä¾
让æä»¬æ¥çä¸ä¸ªå¨å ç´ ä¸è®°å½é¼ æ åæ ç示ä¾ãæ¯å½é¼ æ è¿å ¥å é¨çåãå¨å é¨çåä¸ç§»å¨æéåºå é¨çåæ¶ï¼é½ä¼å¨å个å¯ç¨ç³»ç»ä¸çæ¯ä¸ªç³»ç»ä¸è®°å½å½åé¼ æ åæ æ¥å¤çäºä»¶ã
JavaScript
å¨ JavaScript ä¸ï¼ä»£ç éè¿è°ç¨ addEventListener()ãmouseenterãmousemove å mouseleave 设置äºä»¶å¤çå¨ãå¯¹äºæ¯ä¸ªäºä»¶ï¼æä»¬é½ä¼è°ç¨ setCoords() 彿°ï¼è¯¥å½æ°ä¼å°æ¯ä¸ªç³»ç»çåæ è®¾ç½®å° <p> å
ç´ çå
鍿æ¬ä¸ã
const log = document.querySelector(".log");
const inner = document.querySelector(".inner");
function setCoords(e) {
log.innerText = `
åç§» X/Yï¼${e.offsetX}, ${e.offsetY}
è§å£ X/Yï¼${e.clientX}, ${e.clientY}
é¡µé¢ X/Yï¼${e.pageX}, ${e.pageY}
å±å¹ X/Yï¼${e.screenX}, ${e.screenY}`;
}
inner.addEventListener("mousemove", setCoords);
inner.addEventListener("mouseenter", setCoords);
inner.addEventListener("mouseleave", setCoords);
HTML
HTML ä¸å
å«ä¸ä¸ª "log" ç±»ç <p> å
ç´ ï¼ç¨äºæ¾ç¤ºé¼ æ äºä»¶çæ°æ®ã
<div class="outer">
<div class="inner">
<p class="log">å¨è¿éç§»å¨é¼ æ 以æ¥çåæ </p>
</div>
</div>
CSS
ç¨äºå
å«çåç "outer" ç±»ç¹æè®¾ç½®å¾å¾å®½ï¼ä»¥ä¾¿å¨æ»å¨å
å®¹æ¶æ¥çé¼ æ åæ çææã"inner" 段è½ç¨äºè·è¸ªåè®°å½é¼ æ äºä»¶ã
.outer {
width: 1000px;
}
.inner {
font-family: monospace;
position: relative;
width: 500px;
height: 150px;
top: 25px;
left: 100px;
background-color: darkblue;
color: white;
cursor: crosshair;
user-select: none;
}
.log {
position: relative;
width: 100%;
text-align: center;
}
ç»æ
å¨è¿éï¼ä½ å¯ä»¥çå°å®é ææãå½é¼ æ å¨èè²çåå ç§»å¨æ¶ï¼è§å¯é¼ æ ç X å Y åæ å¼å¨ä¸ååæ ç³»ä¸çååã
åè§
-
ä½¿ç¨ CSS 忢ï¼å¦ä½æ¹ååæ ç³»
-
é¼ æ äºä»¶çåæ ï¼
-
触æ¸äºä»¶çåæ ï¼