window ๊ฐ์ฒด์ scrollTo ๋ฉ์๋๋ ๋ฌธ์๋ฅผ ์ง์ ๋ ์ขํ๋ก ์คํฌ๋กค ํด์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ค. (window๋ ์๋ต ๊ฐ๋ฅ)
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 ์ขํ์์ ๋นผ๋ฉด ๋๋ค.
์ข ํฉ์ฝ๋