반응형
물류 프로그램 설계하느라 홈페이지에 신경을 많이 못쓰던 와중에
scoll 시 section 부분에 효과를 넣어달라는 요청이 와서 처리 하려하는 와중에
발생한 문제
문제의 코드
document.addEventListener('DOMContentLoaded', () => {
const sections = document.querySelectorAll('.scroll-area');
window.addEventListener('scroll', () => {
console.log('fuck');
sections.forEach(section => {
const sectionTop = section.offsetTop;
const sectionHeight = section.clientHeight;
const scrollPosition = window.scrollY + window.innerHeight;
// 섹션의 절반 이상이 보여지면 애니메이션 적용
if (scrollPosition > sectionTop + sectionHeight / 2) {
section.style.opacity = 1;
section.style.transform = 'translateX(0)';
} else {
section.style.opacity = 0;
section.style.transform = 'translateX(-50px)';
}
});
});
});
분명 문제 없이 F word 가 찍혀야 하는데 찍히지 않았다.
전에 적용해 놓은 scroll snap 때문은 아닌가 하는 생각이 머리를 스치는데는 오래 걸리지 않았고
문제의 원인
/* 부모 스크롤 스냅 컨테이너 */
.scroll-container {
height: 100vh;
overflow-y: scroll;
scroll-snap-type: y mandatory; /* y 축 방향으로만 scroll snap 적용 */
}
/* 자식 스크롤 스냅 영역 */
.scroll-area {
padding-top: 83px; /* 헤더의 높이만큼 상단 패딩 추가 */
height: calc(100vh - 83px);
scroll-snap-align: start; /* 스크롤 위치 맞춤 */
}
scroll-container 라는 class에 overflow-y 속성이 적용되어있어 실제 내가 스크롤 하는 영역은 전체 도큐먼트에서 일어나는게 아니라 .scroll-container 영역에서 일어나는 것!!
아마도 css 를 적용하거나 하시다가 overfolw-y : hidden 처리를 하시는 분들이 많을텐데 그 때도 scroll 이벤트는 동작하지 않는다
문제 해결
<!-- ======= Hero Section ======= -->
<div class="scroll-container" id="inner_container">
<!-- 이하 dom 생략 -->
</div>
document.addEventListener('DOMContentLoaded', () => {
const sections = document.querySelectorAll('.scroll-area');
const container = document.getElementById('inner_container');
container.addEventListener('scroll', () => {
console.log('scroll');
});
});
scroll 이벤트 함수를 걸어주는 DOM 을 전체가 아닌 scroll-container 에 적용
성공!!
반응형
'FE > Javascript' 카테고리의 다른 글
React Custom hook 이용하여 인원 수 체크 하기 (1) | 2024.01.31 |
---|---|
React hook 의 개념과 사용법 (0) | 2024.01.31 |
<Next.js-TypeScript-React> - 1 기본 개요 (0) | 2023.08.07 |
[Javascript] Null, undefined, '' 에 대한 체크 (0) | 2023.05.24 |
[Javascript] File Drag and Drop 구현 (0) | 2023.04.12 |