Skip to content

Latest commit

ย 

History

History
330 lines (248 loc) ยท 16.1 KB

step22.md

File metadata and controls

330 lines (248 loc) ยท 16.1 KB

๋ฌธ์„œ ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

STEP 22

๐Ÿ’ก์งˆ์˜์‘๋‹ต์€ https://github.com/pul8219/TIL Issues ํƒญ์˜ ์•Œ๋งž์€ step ์ด์Šˆ์•ˆ์— ๋‚จ๊ฒจ์ฃผ์„ธ์š”. โžก๏ธ Issueํƒญ์œผ๋กœ ์ด๋™

๋ณด์ถฉ ํ•„์š”

๋ชฉ์ฐจ

๐Ÿ’ฌ

โ— https://ko.javascript.info/mouse-events-basics ์—์„œ ๋งŽ์€ ๋‚ด์šฉ์„ ์ธ์šฉํ•˜๊ณ  ์ฐธ๊ณ ํ•˜์—ฌ ์ •๋ฆฌํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ

  • ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋Š” ๋งˆ์šฐ์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•ธ๋“œํฐ, ํƒœ๋ธ”๋ฆฟ๊ณผ ๊ฐ™์€ ์žฅ์น˜์—์„œ๋„ ๋ฐœ์ƒํ•œ๋‹ค.

๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ ์ข…๋ฅ˜

  • mousedown, mouseup: ์š”์†Œ ์œ„์—์„œ ๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๋•Œ(๋ˆ„๋ฅธ ๊ทธ ์ˆœ๊ฐ„), ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ์žˆ๋‹ค๊ฐ€ ๋—„ ๋•Œ(released) ๋ฐœ์ƒ (๋‘˜๋‹ค ์–ด๋–ค ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์ด๋“  ๋ฐœ์ƒ ๊ฐ€๋Šฅ)
  • mouseover, mouseout: ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์š”์†Œ ๋ฐ–์— ์žˆ๋‹ค๊ฐ€ ์š”์†Œ ์•ˆ์œผ๋กœ ์›€์ง์ผ ๋•Œ, ์ปค์„œ๊ฐ€ ์š”์†Œ ์œ„์— ์žˆ๋‹ค๊ฐ€ ์š”์†Œ ๋ฐ–์œผ๋กœ ์›€์ง์ผ ๋•Œ ๋ฐœ์ƒ. ํ•ด๋‹น ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ ์šฉ๋œ ์š”์†Œ์˜ ์ž์‹ ์š”์†Œ์—๊ฒŒ๋„ ์ ์šฉ๋จ.
  • mousemove: ๋งˆ์šฐ์Šค๋ฅผ ์š”์†Œ ๋‚ด๋ถ€์—์„œ ์ด๋™์‹œํ‚ค๋Š” ๋™์•ˆ ๋ฐœ์ƒ
  • click: ๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•ด ์š”์†Œ ์œ„์—์„œ mousedown ์ด๋ฒคํŠธ์™€ mouseup ์ด๋ฒคํŠธ๋ฅผ ์—ฐ๋‹ฌ์•„ ๋ฐœ์ƒ์‹œํ‚ฌ ๋•Œ ์‹คํ–‰๋จ(์š”์†Œ๋ฅผ ์™ผ์ชฝ ๋ฒ„ํŠผ์œผ๋กœ ๊ณ„์† ๋ˆ„๋ฅด๊ณ  ์žˆ๊ธฐ๋งŒ ํ•˜๊ณ  ๋–ผ์ง€ ์•Š์œผ๋ฉด click์— ๋”ฐ๋ฅธ ๋™์ž‘์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝํ—˜์„ ํ•ด๋ดค์„ ๊ฒƒ)
  • dblclick: ๋™์ผํ•œ ์š”์†Œ๋ฅผ ๋‘๋ฒˆ ํด๋ฆญ(click์„ ์˜๋ฏธ)ํ•  ๋•Œ ๋ฐœ์ƒ(๋”๋ธ” ํด๋ฆญ)
  • contextmenu: ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๋ฐœ์ƒ. context menu๊ฐ€ ํ™”๋ฉด์— ๋ณด์ด๊ธฐ ์ „์— ๋ฐœ์ƒ(ํŠน๋ณ„ํ•œ ๋‹จ์ถ•ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ๋„ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ์ฒ˜๋Ÿผ ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” contextmenu๋ผ๋Š” ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ์™€ ๋™์ผํ•˜์ง„ ์•Š์Œ)
  • auxclick: ๋งˆ์šฐ์Šค ์™ผ์ชฝ๋ฒ„ํŠผ(์ฃผ์š” ๋ฒ„ํŠผ)์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์ž‘๋™(ex. ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ, ํœ  ๋ฒ„ํŠผ, ๋‹ค๋ฅธ ๋งคํฌ๋กœ ๋ฒ„ํŠผ ๋“ฑ)
  • select: text๊ฐ€ ์„ ํƒ(๋“œ๋ž˜๊ทธ)๋์„ ๋•Œ ๋™์ž‘. ์š”์†Œ๊ฐ€ inputํƒœ๊ทธ์ด๊ณ  ํƒœ๊ทธ์˜ type์ด text, textarea์ผ ๋•Œ๋งŒ ๋™์ž‘.
  • wheel: ํœ ์„ ์ž‘๋™์‹œํ‚ฌ ๋•Œ ๋ฐœ์ƒ

์ฐธ๊ณ : https://developer.mozilla.org/en-US/docs/Web/Events#Mouse_events

mouseover vs mouseenter

@eyabc ๋‹˜ ๋ฌธ์„œ์—์„œ ์ธ์šฉ

<ul id="test">
  <li>item 1</li>
  <li>item 2</li>
  <li>item 3</li>
</ul>
let test = document.getElementById('test');

// mouseenter ๋Š” ์˜ค์ง ํ•œ๋ฒˆ ๋ฐœ์ƒํ•œ๋‹ค. ์ปค์„œ๊ฐ€ ul ์œผ๋กœ move over ํ•  ๋•Œ
test.addEventListener(
  'mouseenter',
  function (event) {
    // highlight the mouseenter target
    event.target.style.color = 'purple';

    // reset the color after a short delay
    setTimeout(function () {
      event.target.style.color = '';
    }, 500);
  },
  false
);

// mouseover ๋Š” ๋งค๋ฒˆ ๋ฐœ์ƒํ•œ๋‹ค. ์ปค์„œ๊ฐ€ li ๋“ค๋กœ move over ํ•  ๋•Œ๋งˆ๋‹ค.
// mouseover ์˜ ํƒ€๊ฒŸ์€ (Element ๋‚˜ Element ์˜ Child) ์ด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
test.addEventListener(
  'mouseover',
  function (event) {
    // highlight the mouseover target
    event.target.style.color = 'orange';

    // reset the color after a short delay
    setTimeout(function () {
      event.target.style.color = '';
    }, 500);
  },
  false
);

๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ ์ˆœ์„œ

  • ๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด mousedown, mouseup, click ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ ‡๋“ฏ ์‚ฌ์šฉ์ž๋Š” ํ•˜๋‚˜์˜ ๋™์ž‘์„ ํ–ˆ์–ด๋„ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์‹คํ–‰ ์ˆœ์„œ๋Š” ๋‚ด๋ถ€ ๊ทœ์น™์— ๋”ฐ๋ฅธ๋‹ค.

ex)

  • ๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ mousedown - mouseup - click ์ˆœ์œผ๋กœ ์ด๋ฒคํŠธ ๋ฐœ์ƒ
  • ๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ ๋”๋ธ”ํด๋ฆญ์‹œ mousedown - mouseup - click - mousedown - mouseup - click - dblclick ์ˆœ์œผ๋กœ ์ด๋ฒคํŠธ ๋ฐœ์ƒ
  • ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ mousedown - mouseup - contextmenu
  • ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ๋น ๋ฅด๊ฒŒ ๋‘ ๋ฒˆ ๋ˆ„๋ฅผ์‹œ mousedown - mouseup - contextmenu - mousedown - mouseup - contextmenu (์ฆ‰ ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์€ ๋”๋ธ”ํด๋ฆญ ์ ์šฉ์•ˆ๋จ)

https://ko.javascript.info/mouse-events-basics#ref-134 ์—์„œ ๋ฐœ์ƒ ์ˆœ์„œ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ

๋งˆ์šฐ์Šค ๋ฒ„ํŠผ

button ํ”„๋กœํผํ‹ฐ

  • ํด๋ฆญ๊ณผ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ๋Š” ์ •ํ™•ํžˆ ๋งˆ์šฐ์Šค์˜ ์–ด๋–ค ๋ฒ„ํŠผ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” button ํ”„๋กœํผํ‹ฐ๋ฅผ ์ง€์›ํ•œ๋‹ค.
  • click์€ ๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ์„, contextmenu๋Š” ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์™€ ๊ด€๋ จํ•ด์„œ๋Š” buttonํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณดํ†ต ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • mousedown, mouseup ๋“ฑ์˜ ์ด๋ฒคํŠธ๋Š” ์–ด๋–ค ๋ฒ„ํŠผ์—์„œ๋“  ๋ฐœ์ƒ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์— event.button์„ ๋ช…์‹œํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ์–ด๋–ค ๋ฒ„ํŠผ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
๋ฒ„ํŠผ event.button
์™ผ์ชฝ(์ฃผ์š” ๋ฒ„ํŠผ) 0
๊ฐ€์šด๋ฐ(๋ณด์กฐ ๋ฒ„ํŠผ) 1
์˜ค๋ฅธ์ชฝ(๋‘ ๋ฒˆ์งธ ๋ฒ„ํŠผ) 2
X1(๋’ค๋กœ ๊ฐ€๊ธฐ ๋ฒ„ํŠผ) 3
X2(์•ž์œผ๋กœ ๊ฐ€๊ธฐ ๋ฒ„ํŠผ) 4

์˜ˆ์‹œ

@khw970421 ๋‹˜ ๋ฌธ์„œ์—์„œ ์ธ์šฉ

๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋ณด๋ฉด button ํ”„๋กœํผํ‹ฐ์˜ ์ˆซ์ž๊ฐ’์ด pํƒœ๊ทธ์— ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

<button id="button" oncontextmenu="event.preventDefault();">
  Click here with your mouse...
</button>
<p id="log"></p>
<script>
  let button = document.querySelector('#button');
  let log = document.querySelector('#log');
  button.addEventListener('mouseup', logMouseButton);

  function logMouseButton(e) {
    if (typeof e === 'object') {
      log.textContent = `Unknown button code: ${e.button}`;
    }
  }
</script>
  • buttons ํ”„๋กœํผํ‹ฐ: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฒ„ํŠผ์„ ํ•œ๊บผ๋ฒˆ์— ๋ˆŒ๋ €์„ ๋•Œ ํ•ด๋‹น ๋ฒ„ํŠผ๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ •์ˆ˜ ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š” ํ”„๋กœํผํ‹ฐ

์ฐธ๊ณ : https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons

  • event.which ํ”„๋กœํผํ‹ฐ๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์˜ค๋ž˜๋œ ์ฝ”๋“œ์ด๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ง ๊ฒƒ

shift, alt, ctrl, meta ํ”„๋กœํผํ‹ฐ

  • ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํ•จ๊ป˜ ๋ˆ„๋ฅธ ๋ณด์กฐํ‚ค๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์ง€์›ํ•œ๋‹ค.
  • ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋„์ค‘์— ์–ด๋–ค ํ‚ค๊ฐ€ ํ•จ๊ป˜ ๋ˆŒ๋Ÿฌ์กŒ๋‹ค๋ฉด ํ•ด๋‹น ํ‚ค์™€ ๊ด€๋ จ๋œ ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด true๊ฐ€ ๋œ๋‹ค.

๋ณด์กฐํ‚ค ๋ณ„๋กœ ์ง€์›ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ

  • shiftKey: Shiftํ‚ค
  • altKey: Altํ‚ค (MacOS์—์„  Opt ํ‚ค)
  • ctrlKey: Ctrlํ‚ค
  • metaKey: MacOS์—์„œ Cmdํ‚ค

์˜ˆ์ œ

<button id="button">Alt, Shift ํ‚ค๋ฅผ ๋ˆ„๋ฅธ ์ƒํƒœ์—์„œ ํด๋ฆญ</button>

<script>
  button.onclick = function (event) {
    if (event.altKey && event.shiftKey) {
      // event.altKey, event.shiftKey ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์ด ๋‘˜๋‹ค true์ผ ๋•Œ // Alt, Shift ํ‚ค๋ฅผ ๋ˆ„๋ฅธ ์ƒํƒœ์—์„œ ํด๋ฆญ์„ ํ–ˆ๋‹ค๋ฉด
      alert('Success!');
    } else {
      alert('Error!');
    }
  };
</script>

MacOS์—์„œ์˜ Cmdํ‚ค

image

Windows์™€ Linux์ฒ˜๋Ÿผ MacOS๋„ Alt, Ctrl, Shiftํ‚ค๋ฅผ ์ง€์›ํ•˜๊ณ  ์ถ”๊ฐ€๋กœ Cmdํ‚ค๋ฅผ ์ง€์›ํ•œ๋‹ค. ์ด ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœํผํ‹ฐ๋กœ metaKey๊ฐ€ ์žˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋Œ€๋ถ€๋ถ„์€ Windows, Linux์—์„  ์ฃผ๋กœ Ctrl์„ ์‚ฌ์šฉํ•ด ๋‹จ์ถ•ํ‚ค๋ฅผ ์กฐํ•ฉํ•˜์ง€๋งŒ MacOS๋Š” Cmdํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด ๋‹จ์ถ•ํ‚ค๋ฅผ ์กฐํ•ฉํ•˜๊ณค ํ•œ๋‹ค. Windows์˜ Ctrl+Enter๋‚˜ Ctrl+A๊ฐ€ MacOS์—์„  Cmd+Enter๋‚˜ Cmd+A๋กœ ๋ˆŒ๋Ÿฌ์•ผ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

๋”ฐ๋ผ์„œ MacOS ์‚ฌ์šฉ์ž๋„ ์ง€์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋ ค๋ฉด ์˜ˆ๋ฅผ ๋“ค์–ด Ctrlํ‚ค + click์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๋™์ž‘์ด MacOS์—์„œ Cmdํ‚ค + click์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ๋„ ๋˜‘๊ฐ™์ด ๋‚˜ํƒ€๋‚˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. MacOS ์‚ฌ์šฉ์ž๊ฐ€ Ctrlํ‚ค์™€ ํด๋ฆญ์„ ๋™์‹œ์— ํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ MacOS์—์„œ๋Š” Ctrlํ‚ค์™€ ๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ์„ ํ•จ๊ป˜ ๋ˆ„๋ฅธ ๊ฒƒ์„ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ๊ฒƒ์œผ๋กœ ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. (Windows, Linux์—์„  click์ด๋ฒคํŠธ๋กœ ํ•ด์„๋˜๋Š” ๋™์ž‘์ด MacOS์—์„  contextmenu ์ด๋ฒคํŠธ๋กœ ํ•ด์„๋˜๋Š” ๊ฒƒ!)

์šด์˜์ฒด์ œ ์ข…๋ฅ˜์— ์ƒ๊ด€์—†์ด ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ผํ•œ ๊ฒฝํ—˜์„ ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ์ด๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์•„๋ž˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.

if(event.ctrlKey || event.metaKey){ // ctrlKey ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์—” metaKey ์กฐ๊ฑด๋„ ํ•จ๊ป˜ ๋„ฃ์–ด์ฃผ๊ธฐ
    ...
}

๋ชจ๋ฐ”์ผ ์žฅ์น˜

  • ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ณด๋“œ๊ฐ€ ์žˆ๋Š” ๊ธฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋‹จ์ถ•ํ‚ค๋ฅผ ์ง€์›ํ•˜๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ƒ์Šน์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋ฐ”์ผ ์žฅ์น˜๊ฐ™์ด ๊ธฐ๊ธฐ์— ํ‚ค๋ณด๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๊ณ ๋ คํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•ด์•ผํ•œ๋‹ค.

clientX, clientY์™€ pageX, pageY

clientX, clientY (ํด๋ผ์ด์–ธํŠธ ์ขŒํ‘œ)

  • clientX: ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ viewport๋‚ด์˜ ์ˆ˜ํ‰ ์ขŒํ‘œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ์˜ ์ขŒํ‘œ ์†์„ฑ
  • clientY: ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ viewport๋‚ด์˜ ์ˆ˜์ง ์ขŒํ‘œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ์˜ ์ขŒํ‘œ ์†์„ฑ
  • clientX์™€ clientY๋Š” ํ˜„์žฌ ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ง€๊ณ  ์žˆ๋Š” ์›น๋ฌธ์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ๊ฐ ์™ผ์ชฝ์œผ๋กœ๋ถ€ํ„ฐ, ์œ„๋กœ๋ถ€ํ„ฐ ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • ํŽ˜์ด์ง€๊ฐ€ ์Šคํฌ๋กค๋˜์–ด๋„ ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

[์ถ”๊ฐ€] viewport๐Ÿ’ก

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ˜„์žฌ ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ง€๊ณ  ์žˆ๋Š” ์˜์—ญ(๋ณดํ†ต ์ง์‚ฌ๊ฐํ˜•)์„ ๋‚˜ํƒ€๋‚ด๋Š” ์šฉ์–ด์ด๋‹ค.

pageX, pageY (ํŽ˜์ด์ง€ ์ขŒํ‘œ)

  • pageX: ํŽ˜์ด์ง€ ์ฐฝ ์™ผ์ชฝ์„ ๊ธฐ์ค€์œผ๋กœ ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ์˜ ์ขŒํ‘œ ์†์„ฑ
  • pageY: ํŽ˜์ด์ง€ ์ฐฝ ์œ„์ชฝ์„ ๊ธฐ์ค€์œผ๋กœ ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ์˜ ์ขŒํ‘œ ์†์„ฑ
  • ํ•ด๋‹น html ๋ฌธ์„œ ์ „์ฒด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ ์ขŒํ‘œ์ด๋‹ค.
  • ํŽ˜์ด์ง€๋ฅผ ์Šคํฌ๋กคํ•˜๋ฉด ๊ฐ’๋„ ๋ณ€ํ•œ๋‹ค.

mousedown ์ด๋ฒคํŠธ์™€ ์„ ํƒ ๋ง‰๊ธฐ

์˜ˆ์ œ

  • 1๏ธโƒฃ ๊ธ€์ž ์œ„์—์„œ ๋งˆ์šฐ์Šค๋ฅผ ๋”๋ธ”ํด๋ฆญํ•˜๋ฉด ๊ธ€์ž๊ฐ€ ์„ ํƒ๋œ๋‹ค.
  • 2๏ธโƒฃ ๊ธ€์ž ์œ„์—์„œ ๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ์ฑ„ ์ปค์„œ๋ฅผ ์ด๋ฆฌ์ €๋ฆฌ ์›€์ง์ด๋ฉด ๊ธ€์ž๊ฐ€ ์„ ํƒ(๋“œ๋ž˜๊ทธ)๋œ๋‹ค.
  • dblclick ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด alert ์ฐฝ์„ ๋„์šฐ๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ•ด์น  ์ˆ˜ ์žˆ์–ด ์œ„ ๋‘๊ฐ€์ง€ ๋™์ž‘(1๏ธโƒฃ, 2๏ธโƒฃ)์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•ด์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.(์ฐธ๊ณ )
  • ๊ทธ ์ค‘ ํ•˜๋‚˜๋กœ, mousedown ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ๋™์ž‘์„ ๋ง‰๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. why? ๊ธ€์ž ์š”์†Œ ์œ„์—์„œ mousedown ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ๋™์ž‘์œผ๋กœ ๊ธ€์ž๊ฐ€ ์„ ํƒ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (๊ทธ๋ฆฌ๊ณ  ์•„๊นŒ ํ•™์Šตํ–ˆ๋“ฏ ๋”๋ธ”ํด๋ฆญ ์ด๋ฒคํŠธ ๊ณผ์ •์—์„œ๋Š” mousedown ์ด๋ฒคํŠธ๊ฐ€ ํ•„์—ฐ์ ์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋”๋ธ”ํด๋ฆญํ•  ๋•Œ ๊ธ€์ž๊ฐ€ ์„ ํƒ๋˜๋Š” ์ผ๋„ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ!)
  • ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ๋™์ž‘ ๊ด€๋ จ ๋‚ด์šฉ์€ ์ด ๋งํฌ๋ฅผ ์ฐธ๊ณ 

mousedown ์ด๋ฒคํŠธ์˜ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ๋™์ž‘ ๋ง‰๊ธฐ ์ „ ์ฝ”๋“œ

<span id="test1">์ด๊ณณ์„ ๋”๋ธ”ํด๋ฆญ</span>
let test1 = document.getElementById('test1');
test1.addEventListener('dblclick', function () {
  // ์š”์†Œ์— ๋”๋ธ” ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด
  alert('dblclick'); // alert ์ฐฝ์„ ๋„์›€
});

mousedown ์ด๋ฒคํŠธ์˜ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ๋™์ž‘ ๋ง‰๋Š” ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•œ ์˜ˆ์‹œ

<span id="test1">์ด๊ณณ์„ ๋”๋ธ”ํด๋ฆญ</span>
let test1 = document.getElementById('test1');
test1.addEventListener('mousedown', function (event) {
  event.preventDefault();
});
test1.addEventListener('dblclick', function () {
  alert('dblclick');
});

event.preventDefault()

๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ๋™์ž‘์„ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋Š” event ๊ฐ์ฒด์— ๊ตฌํ˜„๋œ ๋ฉ”์†Œ๋“œ์ด๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋งํฌ ์ฐธ๊ณ 

ํ˜น์€

...
<b ondblclick="alert('ํด๋ฆญ!')" onmousedown="return false"> ์ด๊ณณ์„ ๋”๋ธ”ํด๋ฆญ </b>
...

return false; ์— ๊ด€ํ•ด์„œ๋„ ๊ฐ™์€ ๋งํฌ ์ฐธ๊ณ 

  • mousedown ์ด๋ฒคํŠธ์— ์ˆ˜๋ฐ˜๋˜๋Š” ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ๋™์ž‘์„ ๋ง‰์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธ€์”จ๋ฅผ ๋”๋ธ”ํด๋ฆญํ•ด๋„ ๋‹จ์–ด๊ฐ€ ์„ ํƒ๋˜์ง€ ์•Š๊ณ , ๊ธ€์ž๋ฅผ ๋“œ๋ž˜๊ทธํ•ด๋„ ๊ธ€์ž๊ฐ€ ์„ ํƒ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋‹ค๋งŒ b ํƒœ๊ทธ๊ฐ€ ์“ฐ์ธ ์˜ˆ์ œ์—์„œ ...์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋“œ๋ž˜๊ทธ๋ฅผ ํ•˜๋ฉด ๊ธฐ๋ณธ๋™์ž‘์„ ๋ง‰์•˜์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ด๊ณณ์„ ๋”๋ธ”ํด๋ฆญ์ด๋ผ๋Š” ๊ธ€์”จ๋ฅผ ํฌํ•จํ•œ ๊ธ€์ž๋“ค์„ ์—ฌ์ „ํžˆ ์„ ํƒ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

[์ถ”๊ฐ€] ๋ณต์‚ฌ ๋ง‰๊ธฐ๐Ÿ’ก

<div oncopy="alert('๋ณต์‚ฌ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ์ปจํ…์ธ ์ž…๋‹ˆ๋‹ค.'); return false">
  ์ด ํŽธ์ง€๋Š” ์˜๊ตญ์—์„œ ์ตœ์ดˆ๋กœ ์‹œ์ž‘๋˜์–ด ์ผ๋…„์— ํ•œ ๋ฐ”ํ€ด ๋Œ๋ฉด์„œ ๋ฐ›๋Š” ์‚ฌ๋žŒ์—๊ฒŒ
  ํ–‰์šด์„ ์ฃผ์—ˆ๊ณ  ์ง€๊ธˆ์€ ๋‹น์‹ ์—๊ฒŒ๋กœ...blah blah...
</div>

ํƒœ๊ทธ ๋‚ด text๋ฅผ ์„ ํƒํ•œ ํ›„ ๋ณต์‚ฌํ•˜๋ ค๊ณ ํ•˜๋ฉด return false๋ฅผ ์ด์šฉํ•˜์—ฌ oncopy์˜ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ๋™์ž‘์„ ๋ง‰์•„๋†จ๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์‚ฌ๊ฐ€ ์•ˆ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŽ˜์ด์ง€ ์†Œ์Šค ๋ณด๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ผ๋ฉด ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ์†Œ์šฉ์ด ์—†๊ฒ ์ง€๋งŒ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์Šค ๋ณด๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด๋‹จ ๋ณต์ œ๋ฅผ ์–ด๋Š์ •๋„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

image

Comment

References

ํŒ€์›๋“ค ๊ฒฐ๊ณผ๋ฌผ