[๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ปTA9 ์ธํ„ด 51์ผ์ฐจ]JavaScript-window.scrollTo

Goofiยท2023๋…„ 9์›” 7์ผ
0

window.scrollTo

window ๊ฐ์ฒด์˜ scrollTo ๋ฉ”์„œ๋“œ๋Š” ๋ฌธ์„œ๋ฅผ ์ง€์ •๋œ ์ขŒํ‘œ๋กœ ์Šคํฌ๋กค ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค. (window๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ)

window.scrollTo()์—๋Š” ๋‘๊ฐ€์ง€ ์‚ฌ์šฉ๋ฒ•์ด ์žˆ๋‹ค.

1) ์ฒซ๋ฒˆ์งธ ๋ฐฉ์‹

window.scrollTo(xpos, ypos)

ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ฃผ์–ด์ง„ xpos๋Š” x์ขŒํ‘œ, ์ฆ‰ ๊ฐ€๋กœ ์œ„์น˜๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ด๊ณ , ypos๋Š” y์ขŒํ‘œ, ์ฆ‰ ์„ธ๋กœ ์œ„์น˜๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

2) ๋‘๋ฒˆ์งธ ๋ฐฉ์‹

window.scrollTo({top:0, left:0, behavior:'auto'});

top์€ ์„ธ๋กœ ์œ„์น˜, left๋Š” ๊ฐ€๋กœ ์œ„์น˜, scroll-behavior์€ ์Šคํฌ๋กค ํšจ๊ณผ๋ฅผ ์ง€์ •ํ•˜๋Š” ์†์„ฑ์ด๋‹ค. behavior์˜ ๊ฐ’์—๋Š” auto, instant, smooth๊ฐ€ ์žˆ๋‹ค. (๋ฌธ์ž์ด๋ฏ€๋กœ ๋”ฐ์˜ดํ‘œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.) auto๋Š” ๊ธฐ๋ณธ๊ฐ’์ด๋ฉฐ, ๋ฐ”๋กœ ์œ„์น˜๋กœ ์ด๋™ํ•œ๋‹ค. instant๋„ ๊ฐ™์€ ๋™์ž‘์„ ํ•œ๋‹ค. smooth๋Š” ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์ด๋™ํ•˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

์ขŒํ‘œ ์•Œ์•„์˜ค๊ธฐ

์ด์ œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์•Œ์•˜์œผ๋‹ˆ, ์ด๋™์‹œํ‚ค๋ ค๋Š” ์œ„์น˜๋ฅผ ์ˆซ์ž(๋‹จ์œ„๋Š” ์ž๋™์œผ๋กœ pixel)๋กœ ๋„ฃ์–ด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ˆซ์ž๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•œ๋‹ค๋ฉด ๋‚จ๋“ค์ด ๋ดค์„ ๋•Œ ์–ด๋А ์œ„์น˜์ธ์ง€ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ๋„ ํž˜๋“ค๊ณ , HTML ํƒœ๊ทธ๊ฐ€ ์ˆ˜์ •๋˜์–ด ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ ๋‹ค์‹œ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ querySelector์™€ offsetTop์ด๋‚˜ offsetLeft๋กœ ์ง์ ‘ ํ•ด๋‹น ํƒœ๊ทธ์˜ ์œ„์น˜๋ฅผ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

document.querySelector๋กœ ๋จผ์ € ์œ„์น˜๋ฅผ ์•Œ์•„์˜ค๋ ค๋Š” ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. offsetTop์œผ๋กœ ํ•ด๋‹น ์š”์†Œ์˜ top ์œ„์น˜(๋งˆ์ง„ ๊ฐ’๊นŒ์ง€ ํฌํ•จํ•œ๋‹ค๊ณ  ํ•œ๋‹ค)๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. offsetLeft๋Š” ์ด๋ฆ„์œผ๋กœ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด left ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ์—ญ์‹œ ๋งˆ์ง„ ๊ฐ’๋„ ํฌํ•จํ•œ๋‹ค.

var location = document.querySelector("#move").offsetTop;

id๊ฐ€ move์ธ ์š”์†Œ์˜ top ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

window.scrollTo({top:location, behavior:'smooth'});

ํ•ด๋‹น ์œ„์น˜๋กœ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์ด๋™ํ•  ๊ฒƒ์ด๋‹ค.

ํƒญ ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•  ๋•Œ ์œ„ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ฒŒ ํ•œ๋‹ค๋ฉด, ํƒญ ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ํŠน์ • ์œ„์น˜๋กœ ์ด๋™ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

+) ๋งŒ์•ฝ ์œ„์— ๊ณ ์ • ๋ฉ”๋‰ด๊ฐ€ ์žˆ๋‹ค๋ฉด, ์Šคํฌ๋กค์ด ์ด๋™ํ•˜๋ฉด์„œ ๊ทธ ๋ฉ”๋‰ด์— ๋‚ด์šฉ ์œ—๋ถ€๋ถ„์ด ๊ฐ€๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค.

var menuHeight = document.querySelector(".menu").offsetHeight;

window.scrollTo({top:location - menuHeight, behavior:'smooth'});

์ด๋ ‡๊ฒŒ offsetHeight๋กœ ํ•ด๋‹น ์š”์†Œ์˜ ๋†’์ด๋ฅผ ๊ตฌํ•˜์—ฌ top ์ขŒํ‘œ์—์„œ ๋นผ๋ฉด ๋œ๋‹ค.

์ข…ํ•ฉ์ฝ”๋“œ

profile
์˜ค๋Š˜๋ณด๋‹จ ๋‚ด์ผ์ด ๊ฐ•ํ•œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค!!๐Ÿง‘๐Ÿปโ€๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€

Powered by GraphCDN, the GraphQL CDN