๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
Lang
JS-DOM
01-Web API

1. Web APIs๋ž€?

๋ธŒ๋ผ์šฐ์ € ์ž์ฒด์—์„œ ์ œ๊ณตํ•˜๋Š” API์ด ๊ต‰์žฅํžˆ ๋งŽ์Šต๋‹ˆ๋‹ค.

  • DOM APIs
    • Document Object Model์˜ ์•ฝ์ž
    • ์›น ํŽ˜์ด์ง€์— ์žˆ๋Š” ์š”์†Œ๋“ค์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๋˜๋Š” ์Šคํƒ€์ผ์€ ์ด๋Ÿฐ ์กฐ์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต
  • Network APIs : ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณต
  • Graphics APIs : Canvas๋‚˜ WebGL๊ฐ™์€ ๊ทธ๋ž˜ํ”ฝ์— ๊ด€๋ จ๋œ API๋“ค๋„ ์ œ๊ณต
  • Audio/Video APIs : ์˜ค๋””์˜ค๋‚˜ ๋น„๋””์˜ค๋ฅผ ์žฌ์ƒํ•˜๊ฑฐ๋‚˜ ์ค‘์ง€ํ•˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด์— ๊ด€๋ จ API ์ œ๊ณต
  • Device APIs : ๋””๋ฐ”์ด์Šค ์‚ฌ์šฉ์ž๊ฐ€ ์˜จ๋ผ์ธ์ธ์ง€ ์˜คํ”„๋ผ์ธ์ธ์ง€ ๋””๋ฐ”์ด์Šค์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” API ์ œ๊ณต
  • File APIs : ์‚ฌ์šฉ์ž์˜ ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅํ•˜๋Š” API
  • Storage APIs : ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํ† ๋ฆฌ์ง€์— ๊ด€๋ จ๋œ API

cf


2. HTTP์™€ HTTPS

HTTP๋Š” ์›น ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์–ด๋–ป๊ฒŒ ํ†ต์‹ ํ• ์ง€์— ๋Œ€ํ•œ ํ†ต์‹  ๊ทœ์•ฝ์„ ์ •ํ•ด๋†“์€ ๊ฒƒ์œผ๋กœ, Hypertext Transfer Protocol์˜ ์•ฝ์ž๋กœ์จ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๊ณ , ๋‹ค์‹œ ์„œ๋ฒ„์—์„œ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๋Š” request๋ฅผ ํ•˜๊ณ  respence๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

HTTPS๋Š” HTTP์— S๊ฐ€ ๋”ํ•ด์ง„ ๊ฒƒ์œผ๋กœ Hypertext Transfer Protocal Secure์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ๋“ค์ด ๋ณด์•ˆ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ http๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

HTTP์—์„œ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•ด์„œ ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ด๊ฒŒ ๋˜๋ฉด, ์•„๋ฌด๋Ÿฐ encryption์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ , ์ฆ‰ ์•„๋ฌด๋Ÿฐ ๋ณด์•ˆ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์•„์„œ โ€˜dreamโ€™์ด๋ผ๋Š” ๊ธ€์ž๊ฐ€ ๊ทธ๋Œ€๋กœ ์ „์†ก๋˜์–ด์„œ ํ•ด์ปค๊ฐ€ ๋„คํŠธ์›Œํฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ „์†ก๋๋Š”์ง€๋ฅผ ๋“ค์—ฌ๋‹ค๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด์—, HTTPS๋Š” secureํ•˜๊ฒŒ encrypt๊ฐ€ ๋˜์–ด์„œ, ์ฆ‰ โ€˜drameโ€™์ด๋ผ๋Š” ๊ธ€์ž๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ์•Œ์•„๋ณผ ์ˆ˜ ์—†๋Š” โ€˜์•”ํ˜ธํ‚คโ€™๋ฅผ ์ด์šฉํ•ด์„œ ๋ณด์•ˆ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์ปค๊ฐ€ ํ•จ๋ถ€๋กœ ๋ณผ ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ HTTP๋Š” ๋ณด์•ˆ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š๊ณ  HTTPS๋Š” ๋ณด์•ˆ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ช‡๋ช‡ Web APIs๋Š” HTTPS ํ™˜๊ฒฝ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์€ MDN ์‚ฌ์ดํŠธ์—์„œ ํ™•์ธํ•ด์„œ ์ฐพ์•„์„œ ์“ฐ๋ฉด ๋˜๊ณ , ์ด๋Ÿฐ Web APIs์—์„œ ์ œ๊ณตํ•˜๋Š” API ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํŠธ์œ„ํ„ฐ, ํŠธ๋ ๋Ÿฌ, ์œ ํŠœ๋ธŒ, ํ•€ํ„ฐ๋ ˆ์Šค ๋“ฑ์˜ ์„œ๋น„์Šค, ๋‚˜์•„๊ฐ€ ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•œ ํšŒ์‚ฌ์—์„œ ์ž์‹ ๋“ค์˜ ๋ฐฑ์—”๋“œ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


3. Browser ๊ตฌ์กฐ

๋ธŒ๋ผ์šฐ์ €์—์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ์—ด๊ฒŒ ๋˜๋ฉด Window๋ผ๋Š” ์ „์ฒด์ ์ธ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์กด์žฌํ•˜๊ณ , Window๋Š” ์—ฌ๋Ÿฌ๋ถ„๋“ค์˜ ํŽ˜์ด์ง€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ˜„์žฌ ์—ด๋ ค์žˆ๋Š” ์ „์ฒด์ ์ธ ์ฐฝ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Window ์•ˆ์— ์ฆ‰ ํŽ˜์ด์ง€๊ฐ€ ํ‘œ๊ธฐ๋˜๋Š” ๋ถ€๋ถ„์ด Document ์˜ค๋ธŒ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, Document๋Š” HTML์—์„œ ์ž‘์„ฑํ•œ ์š”์†Œ๋“ค์ด ํ‘œ๊ธฐ๋˜๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž ๋ˆˆ์—๋Š” ๋ณด์ด์ง„ ์•Š์ง€๋งŒ ์ „์ฒด์ ์œผ๋กœ ์œˆ๋„์šฐ์— ๊ด€๋ จ๋œ ์ฆ‰ ๋ธŒ๋ผ์šฐ์ € ์ž์ฒด์— ๊ด€๋ จ๋œ ์ •๋ณด๋“ค์ด ๋‹ด๊ฒจ ์žˆ๋Š” Navigator๋ผ๋Š” ์˜ค๋ธŒ์ ํŠธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข…๋ฅ˜์„ค๋ช…
window์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—ด๋ฆด ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ์ตœ์ƒ์œ„ ๊ด€๋ฆฌ ๊ฐ์ฒด (๋ธŒ๋ผ์šฐ์ € ์ฐฝ)
document์›น ๋ธŒ๋ผ์šฐ์ €์— ํ‘œ์‹œ๋˜๋Š” HTML ๋ฌธ์„œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๊ฐ์ฒด (๋ธŒ๋ผ์šฐ์ € ๋‚ด์šฉ)
location์›น ๋ธŒ๋ผ์šฐ์ €์— ํ˜„์žฌ ํ‘œ์‹œ๋œ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ URL ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๊ฐ์ฒด
history์›น ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋œ ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ด ํฌํ•จ๋œ ๊ฐ์ฒด
navigator์›น ๋ธŒ๋ผ์šฐ์ € ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๊ฐ์ฒด
screen์›น ๋ธŒ๋ผ์šฐ์ €์˜ ํ™”๋ฉด ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๊ฐ์ฒด

๊ทธ๋ž˜์„œ HTML, CSS, JavaScript๋ฅผ ํฌํ•จํ•œ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋ฉด Window๋ผ๋Š” ์ „์ฒด์ ์ธ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์žˆ๊ณ , Window ์•ˆ์—๋Š” DOM(Document ๋ชจ๋ธ)์ด ๋“ค์–ด์žˆ๊ณ , DOM์„ ์ด์šฉํ•ด์„œ ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๋นผ๊ฑฐ๋‚˜ ์›€์ง์ด๊ณ  ์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋˜ BOM์€ Browser Object Model์˜ ์•ฝ์ž๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๊ด€๋ จ๋œ Navigator๋‚˜ Location์ด๋‚˜ Fetch๋‚˜ Storage๊ฐ™์€ Web APIs ๋“ฑ์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค. MDN ์‚ฌ์ดํŠธ์—์„œ Web APIs์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋“ค์ด BOM์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด์ œ ์ž‘์„ฑํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•จ๊ป˜ ํฌํ•จ์ด ๋˜์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ธŒ๋ผ์šฐ์ € ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ฑธ ๋งŒ๋“ค ๋•Œ๋Š” ์ด๋Ÿฐ DOM ๊ด€๋ จ API๋„ ์“ธ ์ˆ˜ ์žˆ๊ณ , BOM ๊ด€๋ จ API๋„ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†” ์ฐฝ์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํ™•์ธํ•ด๋ณด์„ธ์š”.

1
$ document
2
$ window

์ฝ˜์†”์ฐฝ์„ ์ด์šฉํ•ด์„œ ํ™•์ธํ•ด๋„ ๋˜์ง€๋งŒ MDN Window์— ๊ฐ€๋ฉด ๋” ์ž์„ธํžˆ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Window๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ธ๋ฐ, DOM์˜ document๊ฐ€ ํฌํ•จ๋œ Window๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๋ผ ์„ค๋ช…ํ•˜๋ฉด์„œ, Window๋Š” ๋ฌด์—‡์ด๊ณ , ๊ทธ ์•ˆ์— ์–ด๋–ค ๊ฒƒ๋“ค์ด ๋“ค์–ด์žˆ๋Š” ์ง€๋„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cf. MDN Window


4. window ๊ฐ์ฒด

4.1 window ๊ฐ์ฒด ๊ธฐ๋ณธ ์†์„ฑ

์†์„ฑ์„ค๋ช…
innerWidth์›น ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์˜ ๋„ˆ๋น„๋ฅผ px(ํ”ฝ์…€) ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋ƒ„
innerHeight์›น ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์˜ ๋†’์ด๋ฅผ px ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋ƒ„
outerWidth์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ๋„ˆ๋น„๋ฅผ px ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋ƒ„
outerHeight์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ๋†’์ด๋ฅผ px ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋ƒ„
screenTop / screenY์›น ๋ธŒ๋ผ์šฐ์ € ์œ„์ชฝ ๋ฉด๊ณผ ๋ชจ๋‹ˆํ„ฐ์˜ ๊ฐ„๊ฒฉ์„ px ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋ƒ„
screenLeft / screenX์›น ๋ธŒ๋ผ์šฐ์ € ์™ผ์ชฝ ๋ฉด๊ณผ ๋ชจ๋‹ˆํ„ฐ์˜ ๊ฐ„๊ฒฉ์„ px ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋ƒ„
pageXOffset / scrollX์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ˆ˜ํ‰ ์Šคํฌ๋กค ์œ„์น˜๋ฅผ px ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋ƒ„
pageYOffset / scrollY์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ˆ˜์ง ์Šคํฌ๋กค ์œ„์น˜๋ฅผ px ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋ƒ„
1
<body>
2
<button onclick="printInfo()">window ๊ฐ์ฒด ์†์„ฑ</button>
3
<script>
4
function printInfo(){
5
console.log(`์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋„ˆ๋น„: ${window.innerWidth}`);
6
console.log(`์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋†’์ด: ${window.innerHeight}`);
7
console.log(`์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ๋„ˆ๋น„: ${window.outerWidth}`);
8
console.log(`์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ๋†’์ด: ${window.outerHeight}`);
9
console.log(`์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ ์œ„์ชฝ ๋ฉด๊ณผ ๋ชจ๋‹ˆํ„ฐ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ: ${window.screen Top}/${window.screenY}`);
10
console.log(`์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ ์™ผ์ชฝ ๋ฉด๊ณผ ๋ชจ๋‹ˆํ„ฐ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ: ${window.screen Left}/${window.screenX}`);
11
console.log(`์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ์Šคํฌ๋กค ๊ฐ€๋กœ ์œ„์น˜: ${window.scrollX}`);
12
console.log(`์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ์Šคํฌ๋กค ์„ธ๋กœ ์œ„์น˜: ${window.scrollY}`);
13
}
14
</script>
15
</body>

์ฝ”๋“œ๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ์‹คํ–‰ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์—ฝ๋‹ˆ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๊ฐ€๋กœ์™€ ์„ธ๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ์–ด๋А ์ •๋„ ์Šคํฌ๋กคํ•œ ๋‹ค์Œ ํ™”๋ฉด์— ๋ณด์ด๋Š” window ๊ฐ์ฒด ์†์„ฑ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋ณด๋ฉด, ์ฝ˜์†”์ฐฝ์— ์†์„ฑ๊ฐ’์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


5. window ๊ฐ์ฒด ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ

๋ฉ”์„œ๋“œ์„ค๋ช…
alert()์•Œ๋ฆผ์ฐฝ์„ ํ‘œ์‹œํ•จ
confirm()ํ™•์ธ์ฐฝ์„ ํ‘œ์‹œํ•จ
prompt()์ž…๋ ฅ์ฐฝ์„ ํ‘œ์‹œํ•จ
open()์ƒˆ๋กœ์šด ์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ์—ฐ๋‹ค.
close()์›น ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ๋‹ซ์Œ
setTimeout()์ผ์ • ์‹œ๊ฐ„(ms) ๋’ค์— ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•จ
setInterval()์ผ์ • ์‹œ๊ฐ„(ms)๋งˆ๋‹ค ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•จ
clearIntervalsetInterval() ๋ฉ”์„œ๋“œ๋กœ ๋ฐ˜๋ณต ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ค‘์ง€ํ•จ
scrollTo()์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์Šคํฌ๋กค์„ ํŠน์ • ์œ„์น˜๋งŒํผ ์ด๋™ํ•จ
scrollBy()์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์Šคํฌ๋กค์„ ํ˜„์žฌ ์œ„์น˜์—์„œ ์ƒ๋Œ€์  ์œ„์น˜๋กœ ์ด๋™ํ•จ

5.1 open() : ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ƒˆ ์ฐฝ ์ œ์–ด

์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด ๋ณด๋ฉด ํŒ์—… ๋ฒ„ํŠผ์ด ๋ณด์ž…๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด popup() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด window ๊ฐ์ฒด์˜ open() ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

1
<!-- open.html -->
2
<body>
3
<button onclick="popup()">ํŒ์—…</button>
4
<script>
5
function popup() {
6
// window.open(๊ฒฝ๋กœ, ์ด๋ฆ„, ์†์„ฑ);
7
window.open('popup.html', 'ํŒ์—…', 'width=200, height=100')
8
// popup.html : ์ƒˆ์ฐฝ์—์„œ ์—ด๋ฆด ํŒŒ์ผ์˜ ๊ฒฝ๋กœ
9
// ํŒ์—… : ๋ธŒ๋ผ์šฐ์ € ํƒญ์˜ ์ด๋ฆ„์ด ์•„๋‹ˆ๋ผ open()์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„
10
// width=200, height=100 : ์ƒˆ์ฐฝ์˜ ์†์„ฑ ๊ฐ’
11
}
12
</script>
13
</body>

window.open() ๋ฉ”์„œ๋“œ๋กœ ์—ด๋ฆฌ๋Š” ์ƒˆ ์ฐฝ์„ โ€˜ํŒ์—…์ฐฝโ€™์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์—ด๋ฆฐ ์ฐฝ์€ window ๊ฐ์ฒด์˜ close()๋กœ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต open()๋กœ ์—ด๋ฆฐ ์ƒˆ๋กœ์šด ์ฐฝ์„ ๋‹ซ๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

1
<!-- popup.html -->
2
<body>
3
<button onclick="window.close()">ํŒ์—… ๋‹ซ๊ธฐ</button>
4
</body>

5.2 scrollTo() : ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์Šคํฌ๋กค ์ด๋™

  • scrollTo() : ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์Šคํฌ๋กค์„ ํŠน์ • ์œ„์น˜๋งŒํผ ์ด๋™ํ•จ
  • scrollBy() : ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์Šคํฌ๋กค์„ ํ˜„์žฌ ์œ„์น˜์—์„œ ์ƒ๋Œ€์  ์œ„์น˜๋กœ ์ด๋™ํ•จ

๋‘ ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์— x์ขŒํ‘œ์™€ y์ขŒํ‘œ๋ฅผ ์ „๋‹ฌ๋ฐ›์Šต๋‹ˆ๋‹ค.

1
// ๐Ÿ“Œ ๋ช‡ ๋ฒˆ์„ ํ˜ธ์ถœํ•˜๋”๋ผ๋„ ๊ฐ€๋กœ๋Š” 100px, ์„ธ๋กœ๋Š” 200px์˜ ์œ„์น˜๋กœ ์Šคํฌ๋กค์ด ์ด๋™๋จ
2
window.scrollTo(100, 200)
3
4
// ์›น ๋ธŒ๋ผ์šฐ์ € ์Šคํฌ๋กค์˜ ํ˜„์žฌ ์œ„์น˜์—์„œ ์ƒ๋Œ€์ ์ธ ์œ„์น˜๋กœ ์›€์ง์ด๊ธฐ ๋•Œ๋ฌธ์—
5
// ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์Šคํฌ๋กค์ด ๊ฐ€๋กœ ๋ฐฉํ–ฅ์œผ๋กœ 100px, ์„ธ๋กœ ๋ฐฉํ–ฅ์œผ๋กœ 200px์”ฉ ๊ณ„์† ์ด๋™
6
window.scrollBy(100, 200) // window.scrollBy(x์ขŒํ‘œ, y์ขŒํ‘œ);

๋˜๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

1
window.scrollTo({ left: 100, top: 200 })
2
window.scrollBy({ left: 100, top: 200 })

scrollTo() ๋ฉ”์„œ๋“œ๋‚˜ scrollBy() ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์ „๋‹ฌํ•  ๋•Œ, behavior ์†์„ฑ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. behavior ์†์„ฑ๊ฐ’์„ smooth๋กœ ํ•˜๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ € ์Šคํฌ๋กค์ด ํ•ด๋‹น ์œ„์น˜๋กœ ๋งˆ์šฐ์Šค ํœ ์„ ๊ตด๋ฆฌ๋“ฏ์ด ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

1
window.scrollTo({ top: 4000, behavior: 'smooth' })
2
window.scrollBy({ top: 600, behavior: 'smooth' })

๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ € ๋ชจ๋ธ ๊ฐ์ฒด๋Š” https://developer.mozilla.org/ko/docs/Web/API ์ฐธ๊ณ