WEB/JavaScript

[JavaScript] Event Handling + ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ + ํ‚ค ์ด๋ฒคํŠธ

developer of the night sky 2023. 10. 5. 14:43

๐Ÿ”ปEvent๐Ÿ”ป

  • ๊ฐ์ฒด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์‚ฌ๊ฑด
  • ์–ธ์ œ ๋ฐœ์ƒํ• ์ง€ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ”ปEvent Handling๐Ÿ”ป

  • ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌ ๋ฐ ๋“ฑ๋กํ•œ๋‹ค.
  • ์–ธ์ œ ๋ฐœ์ƒํ• ์ง€ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ์‚ฌ๊ฑด์— ๋Œ€๋น„ํ•˜์—ฌ ๋ฏธ๋ฆฌ ์ฒ˜๋ฆฌํ•  ์ฝ”๋“œ๋ฅผ ์ค€๋น„ํ•œ๋‹ค.
  • ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ•˜๋ฉด ์ค€๋น„ํ•œ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ค๋ผํด์˜ ํŠธ๋ฆฌ๊ฑฐ ๊ฐœ๋…๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

์ด๋ฒคํŠธ ๋“ฑ๋ก

  • onXXX ์†์„ฑ(ํ”„๋กœํผํ‹ฐ)๋กœ ์ œ๊ณตํ•œ๋‹ค.

1. ์ •์  ์ด๋ฒคํŠธ

  • HTML ํƒœ๊ทธ์— ์ ์šฉํ•œ๋‹ค.
    <form name="form1">
        <input type="text" name="txt1">
        <input type="button" value="button" name="btn2" onclick="m1()">
    </form>

    <script>
        function m1() {
            window.document.form1.txt1.value='ํ™๊ธธ๋™';
        }
    </script>

btn2 ํด๋ฆญ์‹œ, text box์— 'ํ™๊ธธ๋™' ์‚ฝ์ž…๋œ๋‹ค.

 

2. ๋™์  ์ด๋ฒคํŠธ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.
<body>
    <h1>Event</h1>

    <form name="form1">
        <input type="text" name="txt1">
        <input type="button" value="button" name="btn3">
    </form>

    <script>
        window.document.form1.btn3.onclick = m2;    //ํ•จ์ˆ˜ ํฌ์ธํ„ฐ(ํ•จ์ˆ˜์˜ ์œ„์น˜ ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค)

        function m2() {
            window.document.form1.txt1.value='๋™์ ';
        }
    </script>
</body>

btn3 ํด๋ฆญ์‹œ, text box์— 'ํ™๊ธธ๋™' ์‚ฝ์ž…๋œ๋‹ค.


๐Ÿ”ป๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๐Ÿ”ป

  • onmouseXXX ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

1. onmouseover / onmouseenter

ํ•ด๋‹น ๊ฐ์ฒด ์˜์—ญ์—์„œ ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์ง„์ž…ํ•˜๋Š” ์ˆœ๊ฐ„ ๋ฐœ์ƒํ•œ๋‹ค.

 

2. onmouseout / onmouseleave

ํ•ด๋‹น ๊ฐ์ฒด ์˜์—ญ์—์„œ ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ๋น ์ ธ๋‚˜๊ฐ€๋Š” ์ˆœ๊ฐ„ ๋ฐœ์ƒํ•œ๋‹ค.

 

3. onmousedown

ํ•ด๋‹น ๊ฐ์ฒด ์˜์—ญ์—์„œ ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋Š” ์ˆœ๊ฐ„ ๋ฐœ์ƒํ•œ๋‹ค.

 

4. onmouseup

ํ•ด๋‹น ๊ฐ์ฒด ์˜์—ญ์—์„œ ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์„ ๋–ผ๋Š” ์ˆœ๊ฐ„ ๋ฐœ์ƒํ•œ๋‹ค.

 

5. onmousemove

ํ•ด๋‹น ๊ฐ์ฒด ์˜์—ญ์—์„œ ๋งˆ์šฐ์Šค ์ปค์„œ ์›€์ง์ผ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.


onmouseover / onmouseout ์˜ˆ์‹œ

<body>
    <script>
        <h1>๋งˆ์šฐ์Šค ๊ด€๋ จ ์ด๋ฒคํŠธ</h1>
        <form name="form1">
            <textarea name="txt1"></textarea>
        </form>
        
        var txt1 = window.document.form1.txt1;

        txt1.onmouseover = m1;
        txt1.onmouseout = m2;
        
        function message(txt){
            var now = new Date();
            txt1.value = now.toLocaleTimeString() + ':' + txt + '\r\n' + txt1.value;
        }
        function m1() {
            message('mouseover');
        }
        function m2() {
            message('mouseout');
        }
    </script>
</body>

textarea ์˜์—ญ์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉด mouseover ๊ฐ€ ์ž‘๋™๋˜์–ด 'mouseover'๊ฐ€ ์ฐํžˆ๊ณ 

์˜์—ญ ๋ฐ–์œผ๋กœ ๋ฒ—์–ด๋‚˜๋ฉด mouserout์ด ์ž‘๋™๋˜์–ด 'mouserout'์ด ์ฐํžŒ๋‹ค.


event.buttons

  • ์–ด๋–ค ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๋Š”์ง€ ์ˆซ์ž๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • 1(์™ผ์ชฝ) , 2(์˜ค๋ฅธ์ชฝ), 3(๊ฐ€์šด๋ฐ), 4(์™ผ์ชฝ+ํœ ), 5(์˜ค๋ฅธ์ชฝ+ํœ ), 6(์™ผ์ชฝ+์˜ค๋ฅธ์ชฝ+ํœ )
  • ๋ณดํ†ต ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ์‚ฌ์šฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

๋งˆ์šฐ์Šค ์ปค์„œ ์ขŒํ‘œ

1. x, y 

  • event.x / event.y
  • ๋ฌธ์„œ ์ขŒ์ธก ์ƒ๋‹จ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.
  • MS์—์„œ ๋งŒ๋“  ๋น„ํ‘œ์ค€์œผ๋กœ ๋น„๊ถŒ์žฅํ•œ๋‹ค.

2. clientX, clientY (***)

  • event.clientX / event.clientY
  • ๋ฌธ์„œ ์ขŒ์ธก ์ƒ๋‹จ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.
  • x,y ๋ฐฉ๋ฒ•๋ณด๋‹ค ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.
  • ์ ˆ๋Œ€์ขŒํ‘œ

3. screenX, screenY

  • event.screenX / event.screenY
  • ๋ชจ๋‹ˆํ„ฐ ์ขŒ์ธก ์ƒ๋‹จ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.
  • ์›นํŽ˜์ด์ง€์˜ ์˜์—ญ ๋ฐ–์˜ ์˜ํ–ฅ์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.

4. offsetX, offsetY (***)

  • event.offsetX / event.offsetY
  • ์ด๋ฒคํŠธ ๊ฐ์ฒด์˜ ์ขŒ์ธก ์ƒ๋‹จ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.
  • ์ƒ๋Œ€์ขŒํ‘œ

 

offsetX, offsetY ์‚ฌ์šฉ ์˜ˆ์‹œ

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        textarea {
            display: block;
            width: 500px;
            height: 300px;
            outline: none;
            resize: none;
            margin-bottom: 5px;
        }
    </style>
</head>
<body>

    <h1>๋งˆ์šฐ์Šค ๊ด€๋ จ ์ด๋ฒคํŠธ</h1>
    <form name="form1">
        <textarea name="txt1"></textarea>
        <input type="button" value="๋ฒ„ํŠผ" name="btn1">
    </form>

    <script>
        var txt1 = window.document.form1.txt1;
        
        function message(txt){
            var now = new Date();
            txt1.value = now.toLocaleTimeString() + ':' + txt + '\r\n' + txt1.value;
        }
        txt1.onmousedown = m3;
        txt1.onmouseup = m4;

        function m3() {
            if(event.buttons==2) {
                alert('์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญ ๊ธˆ์ง€!');
            }
            message('mounsedown');
        }

        function m4() {
            message(event.offsetX + ',' + event.offsetY);
        }
        
    </script>
</body>
</html>

textarea์œ„์— ํด๋ฆญํ•˜๋ฉด ์ด๋ฒคํŠธ ๊ฐ์ฒด์ธ textarea์œ„์˜ ๋งˆ์šฐ์Šค ์ขŒํ‘œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

onclick ์€ ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๊ฐ€ ์•„๋‹ˆ๊ธฐ์— ์ขŒํ‘œ์™€ ๊ด€๋ จ๋œ ์ž‘์—…์€ ์ง€์–‘ํ•œ๋‹ค. (ํ‚ค๋ณด๋“œ๋กœ click๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.)

๐Ÿ”ปํ‚ค ๊ด€๋ จ ์ด๋ฒคํŠธ๐Ÿ”ป

  • onkeyXXX ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

1. onkeydown

  • ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์ž…๋ ฅ๋œ (๋ฌผ๋ฆฌ)ํ‚ค๋Š” ๊ตฌ๋ถ„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ฌธ์ž๋Š” ๊ตฌ๋ถ„์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ชจ๋“ ํ‚ค์— ๋ฐ˜์‘ํ•œ๋‹ค.(ctrl, alt ๋“ฑ๋“ฑ)
  • ๋ฌผ๋ฆฌํ‚ค๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ง์ „์˜ ๋ˆ„๋ฅธ ๋ฌธ์ž๊ฐ’์„ ๋ฐ˜์˜ํ•  ์ˆ˜ ์—†๋‹ค.

 

2. onkeyup

  • ํ‚ค๋ฅผ ๋—์„ ๋–ผ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์ง์ „์˜ ๋ˆ„๋ฅธ ๋ฌธ์ž๊ฐ€ ํ•„์š”ํ•œ ์—…๋ฌด์— ํ™œ์šฉํ•œ๋‹ค.

 

3. onkeypress

  • ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์ž…๋ ฅ๋œ ๋ฌธ์ž ๊ตฌ๋ถ„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฌธ์žํ‚ค์—๋งŒ ๋ฐ˜์‘ํ•œ๋‹ค.(***)
  • ํ•œ๊ธ€์€ ์ธ์‹ํ•˜์ง€ ์•Š๋Š”๋‹ค.
*๋ฐฉํ–ฅํ‚ค ์ฝ”๋“œ
37(์ขŒ), 38(์ƒ), 39(์šฐ), 40(ํ•˜)

 

onkeydown / onkeyup / onkeypress ์‚ฌ์šฉ ์˜ˆ์‹œ

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        input, textarea {
            display: block;
            margin-bottom: 10px;
            outline: none;
            /* width: 300px; */
        }

        input {padding: 5px;}
        textarea {height: 200px;}

    </style>
</head>
<body>
    <h1>ํ‚ค ์ด๋ฒคํŠธ</h1>

    <form name="form1">
        <input type="text" name="txt1">
        <input type="text" name="txt2">
        <textarea name="txt3"></textarea>
    </form>

    <script>
        var txt1 = window.document.form1.txt1;
        var txt2 = window.document.form1.txt2;
        var txt3 = window.document.form1.txt3;

        txt1.onkeydown = m1;
        txt1.onkeyup = m2;
        txt1.onkeypress = m3;

        function m1() {
            console.log('keydown');
        }

        function m2() {
            console.log('keyup');
        }

        function m3() {
            console.log('keypress');
        }

    </script>
</body>
</html>

 

์ˆซ์ž 123๊ณผ ์˜์–ด abc๋Š” onkeydown, onkeyup, onkeypress ๋ชจ๋‘ ๋ฐ˜์‘ํ•˜์ง€๋งŒ

ํ•œ๊ธ€ ใ„ฑใ„ดใ„ท๋Š” onkeydown, onkeyup๋งŒ ๋ฐ˜์‘ํ•œ๋‹ค.


์ฃผ์˜โ—

๊ธ€์ž๊ฐ€ ํ…์ŠคํŠธ๋ฐ•์Šค์— ์ž…๋ ฅ๋˜๋Š” ์‹œ์ ์„ ์•Œ๊ณ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

1. ์‚ฌ์šฉ์ž๊ฐ€ ํ…์ŠคํŠธ๋ฐ•์Šค์— ํ‚ค๋ณด๋“œ์˜ ๊ธ€์ž๋ฅผ ๋ˆ„๋ฅธ๋‹ค.

2. keydown ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

3. ํ…์ŠคํŠธ๋ฐ•์Šค์— ๊ธ€์ž๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค.

4. keyup ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        input, textarea {
            display: block;
            margin-bottom: 10px;
            outline: none;
            width: 300px;
        }

        input {padding: 5px;}
        textarea {height: 200px;}

    </style>
</head>
<body>
    <h1>ํ‚ค ์ด๋ฒคํŠธ</h1>

    <form name="form1">
        <input type="text" name="txt1">
        <input type="text" name="txt2">
    </form>

    <script>
        var txt1 = window.document.form1.txt1;
        var txt2 = window.document.form1.txt2;

        txt1.onkeydown = m1;
	txt1.onkeyup = m2;
        
        function m1() {
            // txt1 ๊ฐ’์ด ํ•œ ๋ฐ•์ž ๋Šฆ๊ฒŒ txt2์˜ ๊ฐ’์œผ๋กœ ๋Œ€์ž…๋จ
            // txt2.value = txt1.value;
        }
        
         function m2() {
            // txt1 ๊ฐ’์ด ๋ฐ”๋กœ txt2์˜ ๊ฐ’์œผ๋กœ ๋Œ€์ž…๋จ
            txt2.value = txt1.value;
        }
    </script>
</body>
</html>

onkeydown

 

onkeyup

 

๋”ฐ๋ผ์„œ, onkeydown๋Š” txt1๊ฐ’์ด ํ•œ ๋ฐ•์ž ๋Šฆ๊ฒŒ txt2์˜ ๊ฐ’์œผ๋กœ ์ž…๋ ฅ๋˜๊ณ 

onkeyup์€ txt1์˜ ๊ฐ’์ด txt2์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๋กœ ์ž…๋ ฅ๋œ๋‹ค.