13-3. JS ํ•จ์ˆ˜ (์ต๋ช…ํ•จ์ˆ˜, ํ™”์‚ดํ‘œํ•จ์ˆ˜, ์ด๋ฒคํŠธ, DOM )

2021. 10. 19. 15:39ใ†HTML + CSS + JS

728x90

1. ์ต๋ช…ํ•จ์ˆ˜ 

์ต๋ช…ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜์ด๋‹ค. 

๋”ฐ๋ผ์„œ ์ต๋ช…ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ• ๋•Œ๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„์ด ์—†๋‹ค. 

 

 

2. ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ 

์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋Š” ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. 

(function () {

   ๋ช…๋ น 

} () ); 

์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ X 

 

(function (๋งค๊ฐœ๋ณ€์ˆ˜) {

   ๋ช…๋ น 

} (์ธ์ˆ˜) ); 

์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜ o

 

 

3. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ 

(๋งค๊ฐœ๋ณ€์ˆ˜) => { ํ•จ์ˆ˜ ๋‚ด์šฉ }

๋งค๊ฐœ๋ณ€์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ 
๋งค๊ฐœ๋ณ€์ˆ˜ 1๊ฐœ์ธ ๊ฒฝ์šฐ 
๋งค๊ฐœ๋ณ€์ˆ˜ 2๊ฐœ ์ด์ƒ 

 

 

4. ์ด๋ฒคํŠธ 

 

1๏ธโƒฃ ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ 

click  : ์‚ฌ์šฉ์ž๊ฐ€ html ์š”์†Œ๋ฅผ ํด๋ฆญํ•  ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

dbclick : ์‚ฌ์šฉ์ž๊ฐ€ html ์š”์†Œ๋ฅผ ๋”๋ธ” ํด๋ฆญํ•  ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

mousedown : ์‚ฌ์šฉ์ž๊ฐ€ ์š”์†Œ ์œ„์—์„œ ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

mousemove : ์‚ฌ์šฉ์ž๊ฐ€ ์š”์†Œ ์œ„์—์„œ ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๋ฅผ ์›€์ง์˜€์„ ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

mouseover : ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๊ฐ€ ์š”์†Œ ์œ„๋กœ ์˜ฎ๊ฒจ์งˆ ๋•Œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ 

mouseout : ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๊ฐ€ ์š”์†Œ๋ฅผ ๋ฒ—์–ด๋‚  ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

mouseup : ์‚ฌ์šฉ์ž๊ฐ€ ์š”์†Œ ์œ„์— ๋†“์ธ ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์—์„œ ์†์„ ๋—„ ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

 

2๏ธโƒฃ ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ 

keydown : ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋Š” ๋™์•ˆ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

keypress : ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

keyup  : ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค์—์„œ ์†์„ ๋—„ ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

 

3๏ธโƒฃ ๋ฌธ์„œ ๋กœ๋”ฉ ์ด๋ฒคํŠธ 

abort : ๋ฌธ์„œ๊ฐ€ ์™„์ „ํžˆ ๋กœ๋”ฉ๋˜๊ธฐ ์ „์— ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋ฅผ ๋ฉˆ์ท„์„ ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

error : ๋ฌธ์„œ๊ฐ€ ์ •ํ™•ํžˆ ๋กœ๋”ฉ๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

load : ๋ฌธ์„œ ๋กœ๋”ฉ์ด ๋๋‚˜๋ฉด ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

resize : ๋ฌธ์„œ ํ™”๋ฉด ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋์„ ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

scroll : ๋ฌธ์„œ ํ™”๋ฉด์ด ์Šคํฌ๋กค ๋˜์—ˆ์„ ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ  

unload : ๋ฌธ์„œ์—์„œ ๋ฒ—์–ด๋‚  ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

 

4๏ธโƒฃ ํผ ์ด๋ฒคํŠธ 

blur  : ํผ ์š”์†Œ์— ํฌ์ปค์Šค๋ฅผ ์žƒ์—ˆ์„ ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

change : ๋ชฉ๋ก์ด๋‚˜ ์ฒดํฌ์ƒํƒœ ๋“ฑ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

focus : ํผ ์š”์†Œ์— ํฌ์ปค์Šค๊ฐ€ ๋†“์˜€์„ ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

reset  : ํผ์ด ๋ฆฌ์…‹๋˜์—ˆ์„ ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ

submit : submit ๋ฒ„ํŠผ์ด ํด๋ฆญํ–ˆ์„ ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

 

5. ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ 

์›น ๋ฌธ์„œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ ํ˜น์€ ์ด๋ฒคํŠธ ํ—จ๋“ค๋Ÿฌ๋ผ๊ณ  ํ•œ๋‹ค. 

<ํƒœ๊ทธ on์ด๋ฒคํŠธ๋ช… = "ํ•จ์ˆ˜๋ช…">

 

* ์—ฐ์Šต๋ฌธ์ œ 1

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ด๋ฒคํŠธ</title>
	<link rel="stylesheet" href="css/event.css">
</head>
<body>
	<div id="item">
		<img src="images/flower.jpg" alt="">
		<button class="over" id="open" onclick="showDetail()">์ƒ์„ธ ์„ค๋ช… ๋ณด๊ธฐ</button>
		<div id="desc" class="detail">
			<h4>๋“ฑ์‹ฌ๋ถ“๊ฝƒ</h4>
			<p>๋ถ์•„๋ฉ”๋ฆฌ์นด ์›์‚ฐ์œผ๋กœ ๊ฐ์ง€์—์„œ ๊ด€์ƒ์ดˆ๋กœ ํ”ํžˆ ์‹ฌ๊ณ  ์žˆ๋Š” ๊ท€ํ™”์‹๋ฌผ์ด๋‹ค. ๊ธธ๊ฐ€๋‚˜ ์ž”๋””๋ฐญ์—์„œ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์•„์ฃผ ์ž‘์€ ์”จ์•—์„ ๋ฌด์ˆ˜ํžˆ ๋งŽ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ๋ฐ”๋žŒ์„ ์ด์šฉํ•ด ์”จ์•—๋“ค์„ ๋‚ ๋ ค๋ณด๋‚ด๊ฑฐ๋‚˜, ๋ฟŒ๋ฆฌ์ค„๊ธฐ๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ๊ฐœ์ฒด๋“ค์„ ๋งŽ์ด ๋งŒ๋“ค์–ด ๋ƒ„์œผ๋กœ์จ ๋ฒˆ์‹ํ•œ๋‹ค. </p>
			<button id="close" onclick="hideDetail()">์ƒ์„ธ ์„ค๋ช… ๋‹ซ๊ธฐ</button>
		</div>
	</div>	

	<script>
    function showDetail() {
      document.querySelector('#desc').style.display = "block";	// ์ƒ์„ธ ์„ค๋ช… ๋ถ€๋ถ„์„ ํ™”๋ฉด์— ํ‘œ์‹œ
      document.querySelector('#open').style.display = "none";   // '์ƒ์„ธ ์„ค๋ช… ๋ณด๊ธฐ' ๋‹จ์ถ”๋ฅผ ํ™”๋ฉด์—์„œ ๊ฐ์ถค
    }

    function hideDetail() {
      document.querySelector('#desc').style.display = "none";	   // ์ƒ์„ธ ์„ค๋ช… ๋ถ€๋ถ„์„ ํ™”๋ฉด์—์„œ ๊ฐ์ถค
      document.querySelector('#open').style.display = "block";	 // '์ƒ์„ธ ์„ค๋ช… ๋ณด๊ธฐ' ๋‹จ์ถ”๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œ
    }
  </script>
</body>
</html>

 

6. DOM์„ ์ด์šฉํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ 

์›น์š”์†Œ.onclick = ํ•จ์ˆ˜; 

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ด๋ฒคํŠธ</title>
	<link rel="stylesheet" href="css/event.css">
</head>
<body>
	<div id="item">
		<img src="images/flower.jpg" alt="">
		<button class="over" id="open">์ƒ์„ธ ์„ค๋ช… ๋ณด๊ธฐ</button>
		<div id="desc" class="detail">
			<h4>๋“ฑ์‹ฌ๋ถ“๊ฝƒ</h4>
			<p>๋ถ์•„๋ฉ”๋ฆฌ์นด ์›์‚ฐ์œผ๋กœ ๊ฐ์ง€์—์„œ ๊ด€์ƒ์ดˆ๋กœ ํ”ํžˆ ์‹ฌ๊ณ  ์žˆ๋Š” ๊ท€ํ™”์‹๋ฌผ์ด๋‹ค. ๊ธธ๊ฐ€๋‚˜ ์ž”๋””๋ฐญ์—์„œ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์•„์ฃผ ์ž‘์€ ์”จ์•—์„ ๋ฌด์ˆ˜ํžˆ ๋งŽ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ๋ฐ”๋žŒ์„ ์ด์šฉํ•ด ์”จ์•—๋“ค์„ ๋‚ ๋ ค๋ณด๋‚ด๊ฑฐ๋‚˜, ๋ฟŒ๋ฆฌ์ค„๊ธฐ๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ๊ฐœ์ฒด๋“ค์„ ๋งŽ์ด ๋งŒ๋“ค์–ด ๋ƒ„์œผ๋กœ์จ ๋ฒˆ์‹ํ•œ๋‹ค. </p>
			<button id="close">์ƒ์„ธ ์„ค๋ช… ๋‹ซ๊ธฐ</button>
		</div>
	</div>	

	<script>		
		document.querySelector('#open').onclick = function() {
			document.querySelector('#desc').style.display = "block";	// ์ƒ์„ธ ์„ค๋ช… ๋ถ€๋ถ„์„ ํ™”๋ฉด์— ํ‘œ์‹œ
			document.querySelector('#open').style.display = "none";   // '์ƒ์„ธ ์„ค๋ช… ๋ณด๊ธฐ' ๋‹จ์ถ”๋ฅผ ํ™”๋ฉด์—์„œ ๊ฐ์ถค
		}
		document.querySelector('#close').onclick = function() {
			document.querySelector('#desc').style.display = "none";	   // ์ƒ์„ธ ์„ค๋ช… ๋ถ€๋ถ„์„ ํ™”๋ฉด์—์„œ ๊ฐ์ถค
			document.querySelector('#open').style.display = "block";	 // '์ƒ์„ธ ์„ค๋ช… ๋ณด๊ธฐ' ๋‹จ์ถ”๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œ
		}				
	</script>
</body>
</html>

์•ž์— ์—ฐ์Šต๋ฌธ์ œ 1์˜ html์„ dom์„ ์ด์šฉํ•ด์„œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•œ ๊ฒƒ์ด๋‹ค. 

์ง€๊ธˆ๊นŒ์ง€๋Š” html์ด ์ค‘์ ์ด ๋˜์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋ผ๋ฉด 

dom์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ค‘์ ์ด ๋˜์–ด html ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์™€ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. 

 

์œ„์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด 

open์ด๋ผ๋Š” html ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉ์ค‘์ด๋‹ค.

 

html์—๋Š” ์ด์ œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜๊ฐ€ ์—†๋‹ค. 

 

 

 

728x90