scrollTop, scrollHeight
scroll ์๋๋ก ์ ์งํ๊ธฐ
๋ค์ด๊ฐ๋ฉฐ๐
๊ต์ก์๊ฐ์ ๊ฐ๋จํ ์ฑํ ์ฐฝ์ ๋ง๋ค์ด๋ณด์๋๋ฐ ๋ฉ์์ง๋ฅผ ๋ด๋ div๊ฐ ๋์น๋ฉด ์ต์ ๋ฉ์์ง๊ฐ ์๋ ๊ฐ์ฅ ์ค๋๋ ์ต ์๋จ์ ๋ฉ์์ง๊ฐ ๊ณ์ ๋ณด์ด๋ ๊ฑธ ๋ฐ๊ฒฌํ๋ค.
์ฐ๋ฆฌ๊ฐ ์๋ ๋ชจ๋ ์ฑํ ์ฐฝ๋ค์ ๋ฉ์์ง๊ฐ ์์์ ๋ถํฐ ์๋๋ก ์์ด๊ณ , ๊ฐ์ฅ ์ต์ ๋ฉ์์ง๊ฐ ์๋ ๋งจ ์๋ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ธฐ์ ์๋ฆฌ๊ฐ ๊ถ๊ธํ๊ณ UX๋ฅผ ๋ฐ์ํ๊ณ ์ถ์๋ค. ์ฐพ์๋ณด๋ ์คํฌ๋กค ์์ฑ์ ์กฐ์ ํ๋ฉด ๋๋๋ฐ ์ค๋์ ์๋ก ์๊ฒ๋ ๋์ด ๊ด๋ จ ์์ฑ์ ๋ํด ์ ๋ฆฌํ๋ ค ํ๋ค.
scrollTop
scrollTop์ DOM ์์์ ์์ง ์คํฌ๋กค ์์น๋ฅผ ๋ํ๋ด๋ ์์ฑ์ด๋ค. ์์ง ์คํฌ๋กค๋ฐ๋ฅผ ๊ฐ์ง ์์์์ ์คํฌ๋กค๋ฐ์ ์์น๋ฅผ ์กฐ์ํ๊ณ ์ ์ดํ ์ ์๋๋ก ๋์์ค๋ค. ์๋์ ์์ ๋ฅผ ์ฐธ๊ณ ํด๋ณด์.
์ฐ์ 3๊ฐ์ ๋ธ๋ญ์ ์์ฑํ๋๋ฐ ๋ธ๋ญ๋ค์ container๋ก ๊ฐ์ธ์ฃผ์๋ค. (๊ฐ๊ฐ์ ๋์ด๋ ์ฃผ์ ์ฐธ๊ณ )
container๋ ์ผ๋ถ๋ฌ ์์ ์์๊ฐ ๋์น๋๋ก 300px๋ก ์ง์ ํด์ฃผ์๊ณ overflow-y: scroll
์์ฑ์ ์ถ๊ฐํด์ฃผ์๋ค.
<div class="container">
{/* height: 300px */}
<div id="first">first</div> {/* height: 100px */}
<div id="second">second</div> {/* height: 200px */}
<div id="third">third</div> {/* height: 100px */}
</div>
๊ทธ๋ฆฌ๊ณ ์คํฌ๋กค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ๋ง๋ค ์คํฌ๋กค ์ ๋ณด๋ฅผ ๊ฐ์ ธ์๋ณด์
<script>
const container = document.querySelector(".container");
{/* ์ค์๊ฐ scrollTop ๋ก๊ทธ ์ฐ๊ธฐ */}
function handleScroll() {
const scrollTop = container.scrollTop;
console.log("Scroll position:", scrollTop);
}
container.addEventListener("scroll", handleScroll);
</script>
์์ ์ด๋ฏธ์ง์์ ๋ณด๋๊ฒ์ฒ๋ผ scroll ์ด๋ฒคํธ ๋ฐ์์์ scrollTop ๋ก๊ทธ๊ฐ ๊ณ์ ์ฐํ๊ณ ์๋๊ฑธ ๋ณผ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ scrollTop ์ค์ ์ ์ ์ดํด๋ณด์.
<script>
const container = document.querySelector(".container"); container.scrollTop =
100;
</script>
์คํฌ๋กค์ด ์์ฑ๋ ์์ญ์์ scrollTop = n
์ ์ ํด์ฃผ๋ฉด ํ๋ฉด์ด ๋ ๋๋ง๋ ๋ ๊ทธ ๊ฐ๋งํผ ์คํฌ๋กค ๊ฐ์ด ์ง์ ๋๋ค. ๋๊ฐ์ ๊ฒฝ์ฐ๋ 3๊ฐ์ ๋ฐ์ค์ค ์ ์ผ ์๋จ์ ๋ฐ์ค ๋์ด๊ฐ โ100xโ ์ด์๊ธฐ ๋๋ฌธ์ scrollTop = 100 ์ผ๋ก ์ธํด ์ฒซ๋ฒ์งธ ๋ธ๋ญ์ด ์์ ํ ์จ๊ฒจ์ง๊ฒ ๋์๋ค.
์!! ๊ทธ๋ ๋ค๋ฉด scroll์ ๊ฒ์ ์๋๋ก ์ ์งํ๋ค๋ฉด ์ฑํ
๋ฐฉ์์ ๊ณ์ ์ต์ ์ฑํ
์ ๋ณผ ์ ์๋๊ฑด๊ฐ???๐คท๐ปโโ๏ธ
ํํ ๋ฐ๋ก ๊ทธ๊ฒ์ด๋ค.๐ ์ด๋ก ์ scrollTop = ๋ด๊ฐ ์ํ๋ DOM์ ๋์ด
๋ฉด ๋์ผํ๋๋ฐ,,, ๊ทธ๋ ์ง๋ง ํธ๋ฝํธ๋ฝํ์ง ์๋ค. ์ฑํ
์ด ์ฃผ๊ณ ๋ฐ์์ง๋ฉด ๊ทธ ์ฑํ
๋ฐฉ์ ๋์ด ์์ฑ์ ๊ณ์ ๋ณํ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ง์์ ์ผ๋ก ๋ณํ๋ ๋์ด ์์ฑ์ ์์์ผํ๋ค.
scrollHeight
scrollHeight ๋ DOM ์์์ ์ค์ ๋์ด๊ฐ์ด๋ค. ํ๋ฉด์ ๋ณด์ฌ์ง๋ ์์ญ ์ธ์ ์ ์ฒด ๊ฐ์ ๋ปํ๋ค. ์ฌ๊ธฐ์ container ์ ๋ณด์ฌ์ง๋ ๋์ด๋ 300px ์ด์ง๋ง ์ค์ ๋ด๋ถ์ 3๊ฐ์ ๋ธ๋ญ์ด ์ํด์๋ค. ๊ทธ 3๊ฐ์ ๋์ด ๊ฐ์ ๋ค ๋ํ๊ฒ 400px ์ด๊ณ ์ด๊ฒ์ด scrollHeight ๊ฐ์ด ๋๋ค.
๊ทธ๋ฌ๋ฉด ํ๋ฉด์ ๋ณด์ฌ์ง๋ ๋์ด ๊ฐ์ ๋ฌด์์ผ๊น?
clientHeight
clientHeight ๋ ํ์ฌ ๋ณด์ฌ์ง๋ ๊ฐ์ด๋ค. ์์์ ์ธ๊ธํ๋ฏ container์ ๋์ด ์์ฑ์ผ๋ก ์ง์ ํด์ฃผ์๋ 300px ์ด client ๊ฐ์ด ๋๋ ๊ฒ์ด๋ค. ์ค์ ๋ก ๋ก๊ทธ๋ฅผ ์ฐ์ด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
์๋์ ์ด๋ฏธ์ง๋ก ์ ๋ฆฌํด๋ดค๋ค.
์ฑํ ๋ฐฉ ์๋๋ก ์ ์ง์ํค๊ธฐ
๊ทธ๋ ๋ค๋ฉด ์ฑํ
์ฐฝ์ ์ฑํ
์ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ์ค์ DOM ์ ๊ฐ์ฅ ์๋์ ์ต์ ์ฑํ
์ด ๋ฐฐ์น๋๊ธฐ ๋๋ฌธ์ scrollHeight
์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์ ์ ํ๋ค.
chatDiv.scrollTop = chatDiv.scrollHeight;
์ฌ์ค ๊ฒฐ๋ก ์ ์ด๊ฒ ๋์ด๋ค. ๋งค์ฐ ๋จ์ํ๋ค.๐
์ง ! ์์ ์์ฑ์ ์ ์ฉ์์ผ์ฃผ๋ฉด ์ด๋ฏธ์ง์ ๊ฐ์ด ์ฑํ ์ ๊ณ์ ์ถ๊ฐํด๋ ํ๋ฉด์ด ๊ณ์ ์ ์ง๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฌ์ค ์์
์ ๋ฐ๋ผ๊ฐ๋ฉด์ ํ๋ฉด ๊ตฌํ๋ง ํ๊ณ ๋๋ค! ํ๊ณ ๋์ด๊ฐ๋ คํ๋๋ฐ, ์์ ์กฐ์ฅ๋์ด โ์, ์ด๊ฑฐ ์ฑํ
์ฌ๋ผ๊ฐ๋๋ง๋ค ํ๋ฉด ๋ด๋ ค์ฃผ๊ณ ์ถ์๋ฐโ ์์ ๋ฌธ์ ๋ฅผ ๊นจ๋ซ๊ณ ์คํฌ๋กค ์์ฑ์ ๋ํ ๊ณต๋ถ๊ฐ ์์๋๋ค. ์ฌ์ค ์กฐ๊ธ๋ง ์ธํฐ๋ท์ ์ฐพ์๋ด๋ ๋ฐ๋ก ์ ์ ์์ด ์ ์ฉ์ ๋น ๋ฅด๊ฒ ํ๋ค๋ง,,,
์กฐ์ฅ๋์ ๋ง์ ๋ค์์๋ ์ฌ์ค ํ๋ ๋ง์ ๊ฒ ๊ฐ์๋ค. ์ ๋ ๊ทธ๋ฐ ์๊ฐ์ ๋ชปํ์ง? ์ฌ์ค ์๊ฐ๋ชปํ๊ฒ ์ด์ฉ๋ฉด ๋น์ฐํ ์๋,, ์ฑํ
์ฐฝ์ด ๋ด๋ ค๊ฐ๋๊น์ง ์ฑํ
์ ์น์ง ์์์๋ค.. ํ๋ฉด์ ์ฑํ
ํ๋๊ฐ๋ง ๋ฃ๊ณ ๋๋คํ๊ณ ์น์ ์ผ๋ ์ด๋ฐ ๋ฌธ์ ๋ ๋ง์ฃผํ์ง ๋ชปํ๋๊ฒ์ด๋ค. ๋งค์ฐ ๋งค์ฐ ๋ฐ์ฑ๐ฅฒ
ํ์ง๋ง ์ด๋ฒ ๊ฒฝํ์ ํตํด ๋ํ๋ ๋ฐฐ์ ์ผ๋,,, ๋ฌธ์ ๋ฅผ ๋ง๋์ผ ๋ฌธ์ ๊ฐ ๋ญ์ง ์๋ค๋๊ฒ,, ๊ตฌํํ๋ค๊ณ ๋๋ด์ง๋ง๊ณ ๊น์ด ํ๊ณ ๋ค์ด๋ณด์. ์ค๋์ ํฌ์คํ
์ ์ด๋ ๊ฒ ๋ง๋ฌด๋ฆ๐