const preventUserScroll = ( scrollMarginProcessing ) => {
๐ป return Result;
See the Pen Untitled by ๊ตฌํ (@wbnnhjvf-the-lessful) on CodePen.
๐ console.log( history )
ํ์ฌ ํ๋ก์ ํธ ์งํ ์ค ์ฌ์ฉ์๊ฐ ํน์ ์์๋ฅผ ํด๋ฆญํ๋ฉด ์ ๋ ฅํผ์ผ๋ก ์คํฌ๋กค๋๋๋ก ํ๋ ํ์ด์ง๊ฐ ์์๋ค. ๊ตฌํ ํ ๋ฌธ์ ๋ ์คํฌ๋กค ๋์ค์ ๋ฉ์ถ๊ฑฐ๋ ์ ํํ ์์น๋ก ์ด๋ํ์ง ์๋๋ค๋ ๊ฒ์ด์๋ค. scrollIntoView ํจ์๋ฅผ ์ฌ์ฉํด์ ์คํฌ๋กค์ ๊ตฌํํ์๋๋ฐ ๋์ค์ state๊ฐ ๋ฐ๋๊ฑฐ๋ ์คํฌ๋กค ์ด๋ฒคํธ๊ฐ ์ผ์ด๋๊ฒ ๋๋ฉด ์งํ๋๋ ์คํฌ๋กค์ด ๋ฉ์ถ๋ ๋ฌธ์ ๊ฐ ์์๋ค.
state์ ์ํด ์คํฌ๋กค์ด ๋์ค์ ๋ฉ์ถ๋ ๋ฌธ์ ๋ ํด๊ฒฐํ์ง๋ง ์ฌ์ฉ์ ์คํฌ๋กค์ ๋ง์ ๋ฐฉ๋ฒ์ ๋ํด์ ์๊ฐํด์ผ ํ๋ค. scoll event๋ฅผ ๋ฑ๋กํด์ ์ฌ์ฉํ๊ธฐ์๋ ์คํฌ๋กค์ ํ์ฉํ๊ณ ๋ง์ ์์ ์ ์ก๊ธฐ๊ฐ ์ด๋ ค์ ๋ณด์๋ค. ๊ทธ๋์ ๊ตฌ๊ธ๋ง ๋์ค ์ฌ์ฉ์์ ์คํฌ๋กค ์ ๋ ฅ์ ๋ง๋ ๋ฐฉ๋ฒ์ผ๋ก overflow ์ต์ ์ hidden์ผ๋ก ์ค์ ํ๊ฒ ๋๋ฉด ์ฌ์ฉ์์ ์คํฌ๋กค ์ ๋ ฅ์ ๋ง์ ์ ์์๋ค. scrollIntoView ํจ์๊ฐ ํด๋น ์์๋ก ์ด๋ํ ๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ต 450~475ms ์ฌ์ด์๋ค. ๊ทธ๋์ scrollIntoView ํจ์์ ํจ๊ป overflow ๊ฐ์ hidden์ผ๋ก ๋ณ๊ฒฝํด ์ฃผ๊ณ setTimeout์ ํตํด scrollIntoView ํจ์๊ฐ ์๋ฃ๋๊ณ overflow๋ฅผ ๋ค์ scroll์ด๋ auto๋ก ์ค์ ํด ์ฃผ์ด ํด๊ฒฐํ๋ค.
์ถ๊ฐ๋ก overflow ์ต์ ์ hidden์ผ๋ก ์ค์ ํ ๊ฒฝ์ฐ ์คํฌ๋กค ๋๋น์ ์ํด ํ์ด์ง ๋๋น๊ฐ ๋ฐ๋๋ ๋ฌธ์ ๊ฐ ์์๋ค. ๊ฒ์์ ํตํด scrollbar-gutter ์ต์ ์ stable๋ก ์ค์ ํ์ฌ ๋๋น๋ฅผ ๊ณ ์ ์ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ค. ๋ค๋ง, stable๋ก ์ค์ ํ ๊ฒฝ์ฐ ์คํฌ๋กค ๋๋น๋งํผ ์ฌ๋ฐฑ์ด ์๊ฒผ๋ค. ์ฌ๋ฐฑ์ ๋ํด์๋ ํด๊ฒฐํ์ง ๋ชปํ์ง๋ง css๋ฅผ ํตํด ์ฌ๋ฌ ๋ฐฉ๋ฒ์ ๊ณ ์ํด ๋ผ ์ ์์ ๊ฒ์ด๋ผ ์๊ฐํ๋ค.
/ / Improvement
์ฉ ๋ง์์ ๋๋ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์๋๋ค. ์ด์ ๋ ์ฌ์ฉ์์ ์คํฌ๋กค์ ๊ฐ์ ๋ก ๋ง์์ผ ํ๋ค๋ ์ , ์คํฌ๋กค์ด ์์ด์ง๊ณ ์๊ธฐ๋ ๊ฒ์ด ์ฌ์ฉ์์๊ฒ ๋ณด์ธ๋ค๋ ์ ์ด๋ค. ๋ํ ํ์ฌ๊น์ง ์ฌ๋ฌ ํ์ฌ ํ๋ก์ ํธ๋ฅผ ์งํํด ์ค๋ฉด์ state์ ๋ํ ๋ฌธ์ ๋ค์ ๊ฒช์๋ค. ์ด๋ป๊ฒ state ์ฌ์ฉํด์ผ ์ด๋ฒ ๋ฌธ์ ์ ๊ฐ์ ๊ฒ๋ค์ด ์๊ธฐ์ง ์๋์ง ๊ณ ๋ฏผํด์ผ๊ฒ ๋ค.
}
'DEV > WebProgramming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React.js] ๋น๋ ํ ํ๊ฒฝ๋ณ์ ์์ (0) | 2024.07.12 |
---|---|
[React.js] debounce ์ฌ์ฉํ๊ธฐ (0) | 2024.07.09 |
[React.js] ์์ ๋ก๊ทธ์ธ ๊ตฌํ - ์นด์นด์ค (0) | 2023.04.28 |
[React.js] Viewport์ ๋์ ์ผ๋ก meta ํ๊ทธ ์์ ํ๊ธฐ (0) | 2023.01.31 |
[React] Table ์ฌ์ฉ๊ธฐ (0) | 2022.12.27 |