ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
window.addEventListener('scroll', function (event) {
let {scrollTop, scrollHeight, clientHeight} = event.target.scrollingElement;
let ratio = (scrollTop / contentHeight) * 100; //์ ์ฒด ๋ฌธ์์ ๋ํ ํ์ฌ ์คํฌ๋กค๋ ๋น์จ๋ฅผ ํผ์ผํธํ
scrollBar.style.transform = `translateX(-${100 - ratio}%)`;
scrollBar.style.transition = 'transform 0.5s ease-out';
})
๋ค์๊ณผ ๊ฐ์ด ์คํฌ๋กค๋ ๋น์จ์ ๋ฐ๋ผ Scroll Indicator๊ฐ ๋์ ์ผ๋ก ์์ง์ด๋๋ก ์ฝ๋๋ฅผ ๊ตฌํํ์๋ค.
ํ์ง๋ง ์คํฌ๋กค์ด ๋๊น์ง ๋ด๋ ค๊ฐ์์๋ Scroll Indicator๋ ๋๊น์ง ์ด๋ํ์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค.
์ฝ์์ฐฝ์ ํตํด ์คํฌ๋กค์ ๋๊น์ง ๋ด๋ ค๊ฐ์ ๋ ๊ฐ์ ํ์ธํด๋ณด๋
100%์ ์์น๊ฐ ๋์์ผ ๋ ๋น์จ์ด 96%๊ฐ๋์์ ๋ฉ์ถฐ ์์๋ค.
๋ฌธ์ ํด๊ฒฐ
์ต์ด ์คํฌ๋กค๋์ง ์๋ ์ํ์์๋ ์คํฌ๋กค ์งํ ์ํฉ์ด 0%์ด์ด์ผ ํ๋ค. ๊ทธ๋ฐ๋ฐ clientHeight๊ฐ ํฌํจ๋ ์ด ๋์ด์์๋ ์คํฌ๋กค๋์ง ์๊ณ ์งํ๋ฅ ์ ํฌํจํ์ง ์์์ผ ํ clientHeight ๋งํผ์ ๋์ด๊ฐ ์์ฌ์๊ธฐ ๋๋ฌธ์ ์ด ๋์ด๋งํผ์ ์ ์ธํด์ผ ํ๋ ๊ฒ์ด๋ค.
window.addEventListener('scroll', function (event) {
let {scrollTop, scrollHeight, clientHeight} = event.target.scrollingElement;
let contentHeight = scrollHeight - clientHeight;
let ratio = (scrollTop / contentHeight) * 100;
scrollBar.style.transform = `translateX(-${100 - ratio}%)`;
scrollBar.style.transition = 'transform 0.5 ease-out';
})
๋ค์๊ณผ ๊ฐ์ด contentHeight ๋ผ๋ ์๋ก์ด ๋ณ์๋ฅผ ์ ์ธํด ์ค ๋ค, ๋ฌธ์์ ์ด ๋์ด(์คํฌ๋กค ๋์์ ์ด ๋์ด)์์ ์น ๋ธ๋ผ์ฐ์ ์ฐฝ(๋ด์ฉ์ด ๋ณด์ฌ์ง๋ ์์ญ)์ ๋์ด๋งํผ์ ๋นผ์ค ๊ฐ์ผ๋ก ์ด๊ธฐํํด์ฃผ์๊ณ , ์ด ๊ฐ์ผ๋ก ๋น์จ์ ๊ณ์ฐํ์๋ค.
'JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
formData์ ๊ฐ์ ์ฐธ์กฐ ๋ฐ ์ฌ์ฉ (0) | 2021.07.30 |
---|---|
CustomEvent๋ก ํน์ ์ด๋ฒคํธ ๊ธฐ๋ฅ ๋ถ๋ฆฌ (0) | 2021.07.28 |
์ด๋ฒคํธ ํธ๋ค๋ฌ this ๋ฐ์ธ๋ฉ ๋ฌธ์ (0) | 2021.07.25 |
JS ์์์ ์ดํธ๋ฆฌ๋ทฐํธ์ ๊ฐ์ฒด ๋์ ํ ๋น (0) | 2021.07.25 |
์คํฌ๋กค ์์น ๊ฐ์ ธ์ค๊ธฐ (0) | 2021.07.23 |