모달 스크롤 이벤트 방지
2024. 2. 13. 18:58ㆍ작업일지
모달이 생성되었을때, 부모 태그에서 이벤트를 방지해야했고,
useEffect(() => {
if (!modalProp.toggle) {
return;
}
const onScroll = (e: Event) => {
e.preventDefault();
e.stopPropagation();
const html = document.querySelector('html') as HTMLElement;
html.style.overflowY = 'hidden';
};
const onRemoveScroll = () => {
const html = document.querySelector('html') as HTMLElement;
html.style.overflowY = 'auto';
window.removeEventListener('scroll', onScroll);
};
window.addEventListener('scroll', onScroll);
return () => {
onRemoveScroll();
};
}, [modalProp.toggle]);
하지만 이코드에서는, 모달에서 드래그이벤트가 발생하고 있을때, 모달이 닫혔을때,
이벤트가 남아있는 현상을 발견했다. 이를 해결하기 위해서
useEffect(() => {
if (!modalProp.toggle) {
return;
}
const onScroll = (e: Event) => {
e.preventDefault();
e.stopPropagation();
const html = document.querySelector('html') as HTMLElement;
html.style.overflowY = 'hidden';
};
const onRemoveScroll = () => {
setTimeout(() => {
const html = document.querySelector('html') as HTMLElement;
html.style.overflowY = 'auto';
}, 1000);
window.removeEventListener('scroll', onScroll);
};
window.addEventListener('scroll', onScroll);
return () => {
onRemoveScroll();
};
}, [modalProp.toggle]);
위 코드와 같이 구현하였다.
하지만. 문제중 하나는, overflowY 라는 값을 변경하는데, timeout을 사용하기 때문에, UX적인 측면에서 문제가 발생한다.
이를 어떻게 해야할지 고민하고 있다.
'작업일지' 카테고리의 다른 글
dotnet maui 8.0 실행인자 추가 (0) | 2024.08.06 |
---|---|
포드 존슨 알고리즘 (2) | 2024.07.17 |
메인페이지 레이아웃 (0) | 2024.01.14 |
contact 페이지 만들기. 11.06~11.08 (0) | 2023.11.08 |