๊ฐœ๋ฐœ์ผ์ง€๐Ÿ“_09

8673 ๋‹จ์–ด Web basicsWeb basics

๐Ÿ’ก ์ด๋ฒˆ ์ฃผ์—๋Š” DOM ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์œผ๋ฉฐ ์ด๋ฒคํŠธ ํ•จ์ˆ˜์™€ ํƒ€์ด๋จธ ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ๋„ ๋ฐฐ์› ๋‹ค. ๋˜ํ•œ ๋ฐฐ์šด ๋‚ด์šฉ์„ ์ ์šฉํ•˜์—ฌ Scroll To Top ๋ฒ„ํŠผ๊ณผ ์ˆ˜ํ‰ ์Šฌ๋ผ์ด๋”๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ์‹ค์Šต์„ ํ•˜์˜€๋‹ค.

์ƒˆ๋กœ ๋ฐฐ์šด ๋‚ด์šฉ๐ŸŒผ

โœ” DOM : HTML ๋ฌธ์„œ์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค
โ–ช ์ฒซ์งธ๋กœ ๋ทฐ ํฌํŠธ์— ๋ฌด์—‡์„ ๋ Œ๋”๋ง ํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
โ–ช ๋‘˜์งธ๋กœ๋Š” ํŽ˜์ด์ง€์˜ ์ฝ˜ํ…์ธ  ๋ฐ ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ  ์Šคํƒ€์ผ์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ์ˆ˜์ •๋˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
โ–ช DOM์€ ๋ฌธ์„œ๋ฅผ ๋…ผ๋ฆฌ ํŠธ๋ฆฌ๋กœ ํ‘œํ˜„ํ•œ๋‹ค. ํŠธ๋ฆฌ์˜ ๊ฐ ๋ธŒ๋žœ์น˜๋Š” ๋…ธ๋“œ์—์„œ ๋๋‚˜๋ฉฐ, ๊ฐ ๋…ธ๋“œ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ–๋Š”๋‹ค.
-> ๋…ธ๋“œ : ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๋„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ˆœ๊ฐ„, ํ•ด๋‹น ์ด๋ฒคํŠธ์™€ ์—ฐ๊ฒฐํ•œ ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ๋ฐœ๋™ํ•œ๋‹ค.

๐Ÿ‘‰DOM์€ ์›๋ณธ HTML ๋ฌธ์„œ ํ˜•ํƒœ์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด์ ์ด ์žˆ๋‹ค.
1. ํ•ญ์ƒ ์œ ํšจํ•œ HTML ํ˜•์‹์ด๋‹ค.
2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์ˆ˜์ •๋  ์ˆ˜ ์žˆ๋Š” ๋™์  ๋ชจ๋ธ์ด์–ด์•ผ ํ•œ๋‹ค.
3. ๊ฐ€์ƒ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค. (Ex. ::after)
4. ๋ณด์ด์ง€ ์•Š๋Š” ์š”์†Œ๋ฅผ ํฌํ•จํ•œ๋‹ค. (Ex. display: none)

โœ” HTML ์š”์†Œ์™€ ๋…ธ๋“œ ๊ฐ์ฒด
HTML ์š”์†Œ๋Š” HTML ๋ฌธ์„œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐœ๋ณ„์ ์ธ ์š”์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
-> HTML ์š”์†Œ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์— ์˜ํ•ด ํŒŒ์‹ฑ๋˜์–ด DOM์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ ๋…ธ๋“œ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜๋œ๋‹ค. ์ด๋•Œ HTML ์š”์†Œ์˜ attribute๋Š” attribute node๋กœ, HTML ์š”์†Œ์˜ text ์ฝ˜ํ…์ธ ๋Š” text node๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

โœ” ์š”์†Œ ๋…ธ๋“œ ์ทจ๋“
HTML์˜ ๊ตฌ์กฐ๋‚˜ ๋‚ด์šฉ ๋˜๋Š” ์Šคํƒ€์ผ ๋“ฑ์„ ๋™์ ์œผ๋กœ ์กฐ์ž‘ํ•˜๋ ค๋ฉด js ํŒŒ์ผ์—์„œ ๋จผ์ € ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ทจ๋“ํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ‘‰DOM์—์„œ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ทจ๋“ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ
โ–ช getElementById : id๋ฅผ ์ด์šฉํ•œ ์š”์†Œ ๋…ธ๋“œ ์ทจ๋“

// id ์ด๋ฆ„์ด slide1์ธ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ๋ฐ˜ํ™˜
const $elem = document.getElementById('slide1')

โ–ช getElementsByTagName : ํƒœ๊ทธ์ด๋ฆ„์„ ์ด์šฉํ•œ ์š”์†Œ ๋…ธ๋“œ ์ทจ๋“

// ํƒœ๊ทธ ์ด๋ฆ„์ด li์ธ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜์—ฌ ๋ฐ˜ํ™˜
const $elems = document.getElementsByTagName('li')

โ–ช getElementsByClassName : class๋ฅผ ์ด์šฉํ•œ ์š”์†Œ ๋…ธ๋“œ ์ทจ๋“

// class ์ด๋ฆ„์ด btn์ธ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ๊ฐ์ฒด์— ๋‹ด์•„ ๋ฐ˜ํ™˜
const $elems = document.getElementsByClassName('btn')

โ–ช queryquerySelector : CSS ์„ ํƒ์ž๋ฅผ ์ด์šฉํ•œ ์š”์†Œ ๋…ธ๋“œ ์ทจ๋“

// class ์ด๋ฆ„์ด scrollToTop์ธ ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ๋ฐ˜ํ™˜
const scrollToTopEl = document.querySelector('.scrollToTop')

// id ์ด๋ฆ„์ด slide1์ธ ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ๋ฐ˜ํ™˜
const firstSlide = document.querySelector('#slide1')

โ–ช querySelectorAll : CSS ์„ ํƒ์ž๋ฅผ ์ด์šฉํ•œ ๋ชจ๋“  ์š”์†Œ ๋…ธ๋“œ ์ทจ๋“

// ul ์š”์†Œ์˜ ์ž์‹ ์š”์†Œ์ธ li ์š”์†Œ๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜์—ฌ ๋ฐ˜ํ™˜
const $elems = document.querySelectorAll('ul > li');

โœ” DOM ์กฐ์ž‘
โ–ช innerHTML ํ”„๋กœํผํ‹ฐ : ์š”์†Œ ๋…ธ๋“œ์˜ HTML ๋งˆํฌ์—…์„ ์ทจ๋“ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•œ๋‹ค.
โ–ช insertAdjacentHTML ๋ฉ”์„œ๋“œ : ๊ธฐ์กด ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ด ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.
โ–ช createElement๋กœ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑ, createTextNode๋กœ ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  appendChild ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ ๋…ธ๋“œ๋ฅผ DOM์— ์ถ”๊ฐ€ํ•œ๋‹ค.
โ–ช insertBefore(newNode, childNode) ๋ฉ”์„œ๋“œ : childNode ์•ž์— newNode๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.
โ–ช cloneNode([deep: true | false]) ๋ฉ”์„œ๋“œ : ๋…ธ๋“œ์˜ ์‚ฌ๋ณธ์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
โ–ช replaceChild(newChild, oldChild) ๋ฉ”์„œ๋“œ : oldChild๋ฅผ newChild๋กœ ๋Œ€์ฒดํ•œ๋‹ค.
โ–ช removeChild(child) ๋ฉ”์„œ๋“œ : ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ child๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
โ–ช style๋กœ ์ธ๋ผ์ธ ์Šคํƒ€์ผ์„ ์กฐ์ž‘ํ•œ๋‹ค.
โ–ช className ํ”„๋กœํผํ‹ฐ : HTML ์š”์†Œ์˜ class๊ฐ’์„ ์ทจ๋“ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•œ๋‹ค.
โ–ช classList ํ”„๋กœํผํ‹ฐ : class ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

โœ” ์ด๋ฒคํŠธ
๋ธŒ๋ผ์šฐ์ €๋Š” ํด๋ฆญ, ํ‚ค๋ณด๋“œ ์ž…๋ ฅ, ๋งˆ์šฐ์Šค ์ด๋™ ๋“ฑ๊ณผ ๊ฐ™์€ ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
โ–ช ์ด๋ฒคํŠธ ํƒ€์ž…

โœ” ํƒ€์ด๋จธ ํ•จ์ˆ˜
ํ•จ์ˆ˜๋ฅผ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚œ ์ดํ›„์— ํ˜ธ์ถœํ•˜๊ณ  ์‹ถ์„ ๋•Œ ํƒ€์ด๋จธ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
โ–ช ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ด๋จธ ํ•จ์ˆ˜์—๋Š” setTimeout๊ณผ setInterval (๊ทธ๋ฆฌ๊ณ  ์ด ๋‘˜์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” clearTimeout๊ณผ clearInterval)์ด ์žˆ๋‹ค.

๐Ÿ‘‰setTimeout๊ณผ setInterval์˜ ์ฐจ์ด๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ๋ฐ˜๋ณต์— ์žˆ๋‹ค.
setTimeout ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑํ•œ ํƒ€์ด๋จธ๋Š” ๋‹จ ํ•œ ๋ฒˆ ๋™์ž‘, setInterval ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑํ•œ ํ•จ์ˆ˜๋Š” ๋ฐ˜๋ณต ๋™์ž‘ํ•œ๋‹ค.

โ–ช setTimeout ์˜ˆ์ œ

// ์ฒซ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ: ํƒ€์ด๋จธ๊ฐ€ ๋งŒ๋ฃŒ๋œ ์ดํ›„ ํ˜ธ์ถœํ•˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜
// ๋‘๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ: ํƒ€์ด๋จธ ๋งŒ๋ฃŒ ์‹œ๊ฐ„
// ์„ธ๋ฒˆ์งธ(์ด์ƒ) ํŒŒ๋ผ๋ฏธํ„ฐ: 
// ํ˜ธ์ถœ ์Šค์ผ€์ค„๋งํ•œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•ด์•ผ ํ•  ์ธ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์„ธ๋ฒˆ์งธ ์ดํ›„์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ
setTimeout(() => console.log('1์ดˆ๊ฐ€ ์ง€๋‚ฌ๋‹ค'), 1000)

โ–ช setInterval , clearInterval ์˜ˆ์ œ

let count = 0;

// setInterval ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” setTimeout๊ณผ ๋™์ผ
const countToFive = setInterval(() => {
  count++;
  // console.log(count);
  
  // count๊ฐ’์ด 5๊ฐ€ ๋˜๋ฉด ํ•จ์ˆ˜ ์Šค์ผ€์ค„๋ง์„ ์ทจ์†Œ
	if (count === 5) clearInterval(countToFive);
}, 1000);

๐Ÿ“ŒScroll To Top ๋ฒ„ํŠผ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ณด๊ธฐ


: ์ด๋ฒˆ ์ฃผ์— ์‹ค์Šตํ•ด๋ณธ Scroll To Top ๋ฒ„ํŠผ์„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ดค๋‹ค. css์—์„œ๋Š” ๋ฒ„ํŠผ์ด ๋ณด์ด์ง€ ์•Š๋„๋ก display: none;์„ ํ•˜์˜€๊ณ  ์›น ํŽ˜์ด์ง€์˜ ํŠน์ • ์œ„์น˜์—์„œ๋ถ€ํ„ฐ๋Š” ๋ฒ„ํŠผ์ด ๋‚˜ํƒ€๋‚˜๋„๋ก ํ•˜๊ณ  ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ํŽ˜์ด์ง€๊ฐ€ ์ƒ๋‹จ์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด js์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.

๋Š๋‚€์ 

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

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ