Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π’Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ JavaScriptΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 48

Автор ΠœΠ°Ρ€Π΅ΠΉΠ½ Π₯Π°Π²Π΅Ρ€Π±Π΅ΠΊΠ΅

Бобытия ΠΎΡ‚ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ запускаСт событиС "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), ΠΈΠ»ΠΈ ΠΆΠ΅ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΅ΠΉ родитСля.