Π‘ΠΎΠ±ΡΡΠΈΡ ΠΎΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ
ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅ Π±ΡΠ°ΡΠ·Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ "keydown". ΠΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΎΡΠΏΡΡΠΊΠ°Π΅ΡΡΡ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠ΅ "keyup".
Π‘ΡΡΠ°Π½ΠΈΡΠ° ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ V ΠΎΡΠΈΠΎΠ»Π΅ΡΠΈΠ²Π°Π΅Ρ.
<script>
addEventListener("keydown", function(event) {
if (event.keyCode == 86)
document.body.style.background = "violet";
});
addEventListener("keyup", function(event) {
if (event.keyCode == 86)
document.body.style.background = "";
});
</script>
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅, "keydown" ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Π½Π°ΠΆΠΈΠΌΠ°ΡΡ. ΠΡΠ»ΠΈ Π½Π°ΠΆΠ°ΡΡ ΠΈ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ, ΡΠΎΠ±ΡΡΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΠΎ ΠΏΡΠΈΡ ΠΎΠ΄Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π° ΠΎΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ (key repeat). ΠΡΠ»ΠΈ Π²Π°ΠΌ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π½Π°Π΄ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° ΡΠΎ ΡΡΡΠ΅Π»ΠΊΠΎΠΉ, ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°ΡΡ Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΎΡΠΏΡΡΠ΅Π½Π° β Π½Π°Π΄ΠΎ Π±ΡΡΡ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠΌ, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ΅ ΡΠΈΠ³Π½Π°Π»Π° ΠΎΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΈΠ½Π°ΡΠ΅ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΠΎΠ·ΡΠ°ΡΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΠΈΠ»ΡΠ½ΠΎ.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ keyCode ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠ±ΡΡΠΈΡ. Π’Π°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠ°Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π°ΠΆΠ°ΡΠ° ΠΈΠ»ΠΈ ΠΎΡΠΏΡΡΠ΅Π½Π°. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΠΊΠΎΠ΄Ρ Π² Π½ΡΠΆΠ½ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ.
ΠΠ»Ρ ΡΠΈΡΡ ΠΈ Π±ΡΠΊΠ² ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Π° Unicode, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ Ρ ΠΏΡΠΎΠΏΠΈΡΠ½ΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΡΠ½Π½ΡΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅. ΠΠ΅ΡΠΎΠ΄ ΡΡΡΠΎΠΊΠΈ charCodeAt Π΄Π°ΡΡ Π½Π°ΠΌ ΡΡΠΎΡ ΠΊΠΎΠ΄.
console.log("Violet".charCodeAt(0));
// β 86
console.log("1".charCodeAt(0));
// β 49
Π£ Π΄ΡΡΠ³ΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΊΠΎΠ΄Ρ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡ. ΠΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΡ Π²ΡΡΡΠ½ΠΈΡΡ β ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ. ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ΄Ρ ΠΊΠ»Π°Π²ΠΈΡ, ΠΈ Π½Π°ΠΆΠ°ΡΡ Π½ΡΠΆΠ½ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ.
ΠΠ½ΠΎΠΏΠΊΠΈ-ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΠΈΠΏΠ° Shift, Ctrl, Alt, ΠΈ Meta (Command Π½Π° Mac) ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠ°ΠΊ ΠΈ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ. ΠΠΎ ΠΏΡΠΈ ΡΠ°Π·Π±ΠΎΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΡΠ½ΠΈΡΡ, Π±ΡΠ»ΠΈ Π»ΠΈ Π½Π°ΠΆΠ°ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, ΡΠ΅ΡΠ΅Π· ΡΠ²ΠΎΠΉΡΡΠ²Π° shiftKey, ctrlKey, altKey, ΠΈ metaKey ΡΠΎΠ±ΡΡΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΈ ΠΌΡΡΠΈ.
ΠΠ°ΠΆΠΌΠΈΡΠ΅ Ctrl-Space Π΄Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ.
<script>
addEventListener("keydown", function(event) {
if (event.keyCode == 32 && event.ctrlKey)
console.log("ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ!");
});
</script>
Π‘ΠΎΠ±ΡΡΠΈΡ "keydown" ΠΈ "keyup" Π΄Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΌ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ. Π Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅ΠΊΡΡ Π²Π²ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ? Π‘ΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΅Π³ΠΎ ΠΈΠ· Π½Π°ΠΆΠ°ΡΠΈΠΉ ΠΊΠ½ΠΎΠΏΠΎΠΊ β Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ "keypress", ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π΅ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ "keydown" (ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠ΅Π΅ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ "keydown", Π΅ΡΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ), Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ΅Ρ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ΄Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ. Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠ±ΡΡΠΈΡ charCode ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Unicode. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ String.fromCharCode Π΄Π»Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π² ΡΡΡΠΎΠΊΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°.
ΠΠ΅ΡΠ΅Π²Π΅Π΄ΠΈΡΠ΅ ΡΠΎΠΊΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ ΠΏΠ΅ΡΠ°ΡΠ°ΠΉΡΠ΅.
<script>
addEventListener("keypress", function(event) {
console.log(String.fromCharCode(event.charCode));
});
</script>
ΠΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΡΠ·Π΅Π» ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, Π³Π΄Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΡΡ ΡΠΎΠΊΡΡ Π²Π²ΠΎΠ΄Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π½Π°ΠΆΠ°ΡΠΈΡ. ΠΠ±ΡΡΠ½ΡΠ΅ ΡΠ·Π»Ρ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΊΡΡ Π²Π²ΠΎΠ΄Π° (Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π½Π΅ Π·Π°Π΄Π°Π»ΠΈ ΠΈΠΌ Π°ΡΡΠΈΠ±ΡΡ tabindex), Π° ΡΠ°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ ΡΡΡΠ»ΠΊΠΈ, ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ ΠΏΠΎΠ»Ρ ΡΠΎΡΠΌ β ΠΌΠΎΠ³ΡΡ. ΠΡ Π²Π΅ΡΠ½ΡΠΌΡΡ ΠΊ ΠΏΠΎΠ»ΡΠΌ Π²Π²ΠΎΠ΄Π° Π² Π³Π»Π°Π²Π΅ 18. ΠΠΎΠ³Π΄Π° Π½ΠΈ Ρ ΡΠ΅Π³ΠΎ Π½Π΅Ρ ΡΠΎΠΊΡΡΠ°, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π° ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ document.body.
ΠΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ
ΠΠ°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ ΡΠΎΠΆΠ΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ±ΡΡΠΈΠΉ. Π‘ΠΎΠ±ΡΡΠΈΡ "mousedown" ΠΈ "mouseup" ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° "keydown" ΠΈ "keyup", ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π°ΠΆΠ°ΡΠ° ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΡΠΏΡΡΠ΅Π½Π°. Π‘ΠΎΠ±ΡΡΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ Ρ ΡΠ΅Ρ ΡΠ·Π»ΠΎΠ² DOM, Π½Π°Π΄ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΡΡ ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ±ΡΡΠΈΡ "mouseup" Π½Π° ΡΠ·Π»Π΅, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΡΠ»ΠΈΡΡ ΠΈ Π½Π°ΠΆΠ°ΡΠΈΠ΅, ΠΈ ΠΎΡΠΏΡΡΠΊΠ°Π½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ "click". ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ Π½Π°ΠΆΠ°Π» ΠΊΠ½ΠΎΠΏΠΊΡ Π½Π°Π΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠΎΠΌ, ΠΏΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ½ΡΠ» ΠΌΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ°ΡΠ°Π³ΡΠ°Ρ ΠΈ ΠΎΡΠΏΡΡΡΠΈΠ» ΠΊΠ½ΠΎΠΏΠΊΡ, ΡΠΎΠ±ΡΡΠΈΠ΅ "click" ΡΠ»ΡΡΠΈΡΡΡ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π» Π² ΡΠ΅Π±Π΅ ΠΎΠ±Π° ΡΡΠΈ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ°.
ΠΡΠ»ΠΈ Π΄Π²Π° ΡΠ΅Π»ΠΊΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΡΡΡΠΎ Π΄ΡΡΠ³ Π·Π° Π΄ΡΡΠ³ΠΎΠΌ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ "dblclick" (double-click), ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° "click".
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΡΠ½ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΌΠ΅ΡΡΠ°, Π³Π΄Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΌΡΡΠΈ, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ pageX ΠΈ pageY β ΠΎΠ½ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡΠ³Π»Π°.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π½Π° ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΠΎ ΠΊΠ»ΠΈΠΊΡ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ ΠΎΠ½ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠΎΡΠΊΡ ΠΏΠΎΠ΄ Π²Π°ΡΠΈΠΌ ΠΊΡΡΡΠΎΡΠΎΠΌ. Π Π³Π»Π°Π²Π΅ 19 Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΠΌΠ΅Π½Π΅Π΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
<style>
body {
height: 200px;
background: beige;
}
.dot {
height: 8px; width: 8px;
border-radius: 4px; /* ΡΠΊΡΡΠ³Π»ΡΠ½Π½ΡΠ΅ ΡΠ³Π»Ρ */
background: blue;
position: absolute;
}
</style>
<script>
addEventListener("click", function(event) {
var dot = document.createElement("div");
dot.className = "dot";
dot.style.left = (event.pageX - 4) + "px";
dot.style.top = (event.pageY - 4) + "px";
document.body.appendChild(dot);
});
</script>
Π‘Π²ΠΎΠΉΡΡΠ²Π° clientX ΠΈ clientY ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° pageX ΠΈ pageY, Π½ΠΎ Π΄Π°ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΈΠ΄Π½Π° ΡΠ΅ΠΉΡΠ°Ρ (Π΅ΡΠ»ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π±ΡΠ» ΠΏΡΠΎΠΊΡΡΡΠ΅Π½). ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΌΡΡΠΈ Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ getBoundingClientRect β Π΅Π³ΠΎ Π²ΠΎΠ·Π²ΡΠ°Ρ ΡΠΎΠΆΠ΅ ΡΠ²ΡΠ·Π°Π½ Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ ΡΠ°ΡΡΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°.
ΠΠ²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΌΡΡΠΈ
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ ΡΠ΄Π²ΠΈΠ³Π΅ ΠΊΡΡΡΠΎΡΠ° ΠΌΡΡΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ "mousemove". ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΌΡΡΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ Ρ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΡΡΡΡ.
Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΏΠΎΠ»ΠΎΡΠΊΡ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠ°ΠΊ, ΡΡΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΠΈΠ»ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π΅Ρ ΡΠΈΡΠΈΠ½Ρ.
ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΌΡΡΡ Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΡΠΈΠ½Ρ:
<div style="background: orange; width: 60px; height: 20px">
</div>
<script>
var lastX; // ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΌΡΡΠΈ
var rect = document.querySelector("div");
rect.addEventListener("mousedown", function(event) {
if (event.which == 1) {
lastX = event.pageX;
addEventListener("mousemove", moved);
event.preventDefault(); // ΠΠ°ΠΏΡΠ΅ΡΠΈΠΌ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅
}
});
function moved(event) {
if (event.which != 1) {
removeEventListener("mousemove", moved);
} else {
var dist = event.pageX - lastX;
var newWidth = Math.max(10, rect.offsetWidth + dist);
rect.style.width = newWidth + "px";
lastX = event.pageX;
}
}
</script>
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ β ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ "mousemove" Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ Ρ Π²ΡΠ΅Π³ΠΎ ΠΎΠΊΠ½Π°. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΌΡΡΡ ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΏΠΎΠ»ΠΎΡΠΊΠΈ, Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°ΡΡ ΡΡΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ½ΠΎΠΏΠΊΡ ΠΎΡΠΏΡΡΠΊΠ°ΡΡ.
ΠΠΎΠ³Π΄Π° ΠΊΡΡΡΠΎΡ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π½Π° ΡΠ·Π΅Π» ΠΈ ΡΡ ΠΎΠ΄ΠΈΡ Ρ Π½Π΅Π³ΠΎ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ ΡΠΎΠ±ΡΡΠΈΡ "mouseover" ΠΈΠ»ΠΈ "mouseout". ΠΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΠΊΡΠΎΠΌΠ΅ ΠΏΡΠΎΡΠ΅Π³ΠΎ, Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΌΡΡΠΈ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Ρ ΠΈΠ»ΠΈ ΠΌΠ΅Π½ΡΡ ΡΡΠΈΠ»Ρ ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΊΡΡΡΠΎΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π°Π΄ ΡΡΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ.
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ° Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π·Π°ΠΏΡΡΠΊΠΎΠΌ Π΅Π³ΠΎ ΠΏΡΠΈ ΡΠΎΠ±ΡΡΠΈΠΈ "mouseover" ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈ ΡΠΎΠ±ΡΡΠΈΠΈ "mouseout". ΠΡΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΌΡΡΠΈ ΠΎΡ ΡΠ·Π»Π° ΠΊ Π΅Π³ΠΎ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌ ΡΠ·Π»Π°ΠΌ Π½Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΡΠ·Π»Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠ΅ "mouseout", Ρ ΠΎΡΡ ΠΌΡΡΡ, Π²ΠΎΠΎΠ±ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, Π΅Π³ΠΎ ΠΈ Π½Π΅ ΠΏΠΎΠΊΠΈΠ΄Π°Π»Π°. Π§ΡΠΎ Π΅ΡΡ Ρ ΡΠΆΠ΅, ΡΡΠΈ ΡΠΎΠ±ΡΡΠΈΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΈ Π²ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ "mouseout" ΠΏΡΠΈ ΡΡ ΠΎΠ΄Π΅ ΠΊΡΡΡΠΎΡΠ° Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΡΠ·Π»ΠΎΠ² ΡΠΎΠ³ΠΎ ΡΠ·Π»Π°, Π³Π΄Π΅ Π²Ρ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ.
ΠΠ»Ρ ΠΎΠ±Ρ ΠΎΠ΄Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ relatedTarget ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠ½ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΡΠ·Π»Π΅ Π±ΡΠ»Π° Π΄ΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΡΡΡ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΡ "mouseover", ΠΈ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΎΠ½Π° ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ ΡΠΎΠ±ΡΡΠΈΠΈ "mouseout". ΠΠ°ΠΌ Π½Π°Π΄ΠΎ ΠΌΠ΅Π½ΡΡΡ ΡΡΡΠ΅ΠΊΡ, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° relatedTarget Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π½Π΅ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π°. Π’ΠΎΠ»ΡΠΊΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΎΠ±ΡΡΠΈΠ΅ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° Π½Π°Ρ ΡΠ·Π΅Π» (ΠΈΠ»ΠΈ ΡΡ ΠΎΠ΄ Ρ ΡΠ·Π»Π°).
ΠΠ°Π²Π΅Π΄ΠΈΡΠ΅ ΠΌΡΡΡ Π½Π° ΡΡΠΎΡ <strong>ΠΏΠ°ΡΠ°Π³ΡΠ°Ρ </strong>.
<script>
var para = document.querySelector("p");
function isInside(node, target) {
for (; node != null; node = node.parentNode)
if (node == target) return true;
}
para.addEventListener("mouseover", function(event) {
if (!isInside(event.relatedTarget, para))
para.style.color = "red";
});
para.addEventListener("mouseout", function(event) {
if (!isInside(event.relatedTarget, para))
para.style.color = "";
});
</script>
Π€ΡΠ½ΠΊΡΠΈΡ isInside ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅Ρ Π²ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΠΊΠΎΠ² ΡΠ·Π»Π°, ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎ Π²Π΅ΡΡ Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° (ΠΈ ΡΠΎΠ³Π΄Π° ΡΠ·Π΅Π» ΡΠ°Π²Π΅Π½ null), ΠΈΠ»ΠΈ ΠΆΠ΅ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΅ΠΉ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ.