특정영역일때 헤더가 사라졌다가 나타나게하기
열심히 검색해서 겨우 구현했는데 반응형시에 위치를 엉뚱하게 잡아 맨위로 올라갈때 헤더가 아예 안나옴...
그래서 비활성화했더니 화면 줄어들고 늘어날때 다른 스크롤 이벤트인 btn이 아예 안먹음...하...
ScrollTrigger.matchMedia({ "(max-width:1023px)":function(){ // 비활성화 $(window).off("scroll"); }, "(min-width:1024px)": function(){ let lastScroll = 0; let isInProjectArea = false; // project-area에 들어갔는지 여부를 추적 $(window).scroll(function () { const curr = $(this).scrollTop(); // 현재 스크롤 위치 const projectAreaOffset = $(".project-area").offset().top; // .project-area의 상단 위치 const projectAreaHeight = $(".project-area").outerHeight(); // .project-area의 높이 const projectAreaEnd = projectAreaOffset + projectAreaHeight; // .project-area의 하단 위치 // .project-area에 진입하면 헤더를 항상 숨김 if (curr >= projectAreaOffset && curr <= projectAreaEnd) { if (!isInProjectArea) { // .project-area에 처음 진입한 경우 $(".header").fadeOut(); isInProjectArea = true; // .project-area 내부로 상태 갱신 } } else { // .project-area를 벗어나면 헤더를 다시 표시 if (isInProjectArea) { $(".header").fadeIn(); isInProjectArea = false; // .project-area 외부로 상태 갱신 } } // 마지막 스크롤 위치 업데이트 lastScroll = curr; }); } })
✅ 네임스페이스(namespace)를 이용해서 헤더만 콕 찝어서 스크롤 안주면 된다!
ScrollTrigger.matchMedia({ "(max-width:1023px)": function () { // 헤더 관련 스크롤 이벤트 제거 $(window).off("scroll.headerFade"); }, "(min-width:1024px)": function () { let isInProjectArea = false; // 헤더 페이드 처리 이벤트 등록 $(window).on("scroll.headerFade", function () { const curr = $(this).scrollTop(); const projectAreaOffset = $(".project-area").offset().top; const projectAreaHeight = $(".project-area").outerHeight(); const projectAreaEnd = projectAreaOffset + projectAreaHeight; if (curr >= projectAreaOffset && curr <= projectAreaEnd) { if (!isInProjectArea) { $(".header").fadeOut(); isInProjectArea = true; } } else { if (isInProjectArea) { $(".header").fadeIn(); isInProjectArea = false; } } }); } })
네임스페이스(namespace)는 고유한 이름 공간을 제공해 충돌을 막준다. 쉽게말해, 나중에 이 이벤트만 골라서 삭제하거나 관리하기 위해서입니다.
.headerFade는 이벤트의 네임스페이스(namespace)를 의미
네임스페이스는 특정 이벤트를 그룹화하거나, 해당 그룹의 이벤트만 선택적으로 제거(off)하거나 추가(on)할 수 있도록 해주는 기능