์น ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ์คํฌ๋กค์ ์ ์ดํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
์กธ์ ํ๋ก์ ํธ๋ก ๋ชจ๋ฐ์ผ ์น์ฑ์ ๋ง๋๋ ๋์ค์ ํด์ฌํ๊ทธ๋ฅผ ๊ทธ๋ฆฌ๋ ํ์์ผ๋ก ์ ๋ ฅ๋ฐ๋ ui๋ฅผ ๊ตฌํํ์์ต๋๋ค.
ํค๋ณด๋ ์ด๋ฒคํธ๋ฅผ ๋ถ์ฌ์ ํด์ฌํ๊ทธ๋ฅผ ์ ๋ ฅ ๋ฐ๋๋ฐ ์ฌ๋ฌ๊ฐ์ ํด์ฌํ๊ทธ๋ฅผ ์ ๋ ฅ ๋ฐ๋ค ๋ณด๋ฉด input ํ๊ทธ๊ฐ ์คํฌ๋กค ์๋๋ก ์จ๊ฒจ์ง๋ ํ์์ด ์์์ต๋๋ค. input ์ฐฝ์ด ๋ด๋ ค๊ฐ ๋๋ง๋ค ์ ์ ๊ฐ ์คํฌ๋กค์ ๋ด๋ ค input ์ฐฝ์ ํ๋ฉด์ ๋ณด์ด๊ฒ ์ ์ดํ๋ ๊ฒ์ ์ข์ง ์์ ์ฌ์ฉ์ ๊ฒฝํ์ด๋ผ ์๊ฐํ์ฌ webAPI์ scrollIntoView๋ฅผ ์ฌ์ฉํ์ฌ input ํ๊ทธ์ ์คํฌ๋กค์ด ๋ฐ๋ผ ๋ด๋ ค๊ฐ๊ฒ ๊ตฌํํ์์ต๋๋ค.
https://developer.mozilla.org/ko/docs/Web/API/Element/scrollIntoView
element.scrollIntoView - Web API | MDN
Element ์ธํฐํ์ด์ค์ scrollIntoView() ๋ฉ์๋๋ scrollIntoView()๊ฐ ํธ์ถ ๋ ์์๊ฐ ์ฌ์ฉ์์๊ฒ ํ์๋๋๋ก ์์์ ์์ ์ปจํ ์ด๋๋ฅผ ์คํฌ๋กคํฉ๋๋ค.
developer.mozilla.org
ํด๋น API์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ MDN์ ์์ธํ ๋์์์ต๋๋ค. ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํํ ๊ฒฝ์ฐ querySelector ๋ก DOM์ ์ง์ ์ ์ด ํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
// ์์ ์ฝ๋
const target = document.querySelector('.inputTagClassName');
target.scrollIntoView();
โ ๋ฆฌ์กํธ ๋ฐฉ์์ ์ ์ฉ
์ ํ๋ก์ ํธ ์์๋ Next.js๋ฅผ ์ฌ์ฉํ์๊ธฐ ๋๋ฌธ์ ๋ฆฌ์กํธ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ๊ฒฝ์ฐ input tag์ Ref๋ฅผ ๋ฌ์์ ์ฌ์ฉํ์์ต๋๋ค.
๋จ, Keyboad Event๋ฅผ ์บ์นํด์ tags๋ผ๋ state์ ๋ณ๊ฒฝ๋๊ฒ ๊ตฌํ์ ํ๋๋ฐ ์ด๋ฐ ๊ฒฝ์ฐ ์คํฌ๋กค์ด ์ ์ฉ๋์ง ์๋ ์๋ฌ๊ฐ ์์์ต๋๋ค. setStateํจ์๊ฐ ํธ์ถ๋๋ฉด์ ํ๋ฉด๋ฆฌ ๋ฆฌ๋ ๋๋ง ๋๊ธฐ ๋๋ฌธ์ scrollIntoview ํจ์๊ฐ ๋์ํ์ง ์๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ์ฌ ๋น๋๊ธฐ ํจ์์ธ setTimeout์ผ๋ก ์งง์ ์๊ฐ์ ๊ฑธ์ด์ฃผ๋ ์ ์์ ์ผ๋ก ๋์ ๋๋ ๊ฒ์ ํ์ธ ํ์ต๋๋ค!
const onKeyUp = (e: KeyboardEvent<HTMLInputElement>) => {
if (e.key === "Enter") {
if(tags.includes(tagInput)) {
setTagInput("");
return;
} // ๊ฐ์ ๊ฐ์ ์ถ๊ฐ ์๋๊ฒ
dispatch(uploadSlice.actions.addTag(tagInput));
setTagInput("");
setTimeout(() => {
inputRef.current!.scrollIntoView({ behavior: "smooth" });
}, 100);
}
};
'javascript > ๐ tips' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋งฅ๋ถ ์ด๊ธฐ ์ธํ ๊ธฐ๋ก (0) | 2023.08.15 |
---|---|
mouseover / mouseenter ์ฐจ์ด, mouseleaver / mouseout ์ฐจ์ด (0) | 2022.03.28 |
๋๊ธ