안녕하세요 찐망고입니다.
오늘도 클론 프로젝트를 하던 중 귀찮지만 막상 구현하면 보기 좋은 헤더 애니메이션
작업과정을 공유해 드릴 건데요.
디테일은 귀찮아서 못하는 거지 막상 하면 만족도가 높..
조만간 이런 공유들을 영상으로 보여드리고 싶은데.. (말만 몇 년째)
해당사이트 학생이 클론작업한 링크입니다 (3개월 유지예정)
KRDS
대한민국 정부 디자인 시스템 KRDS는 누구나 쉽게 정부 서비스를 경험할 수 있도록 가이드라인과 디자인 리소스 및 디자인 시스템 구축을 위한 모든 자료와 최신 정보를 제공한다.
www.krds.go.kr
이 애니메이션의 핵심은 헤더를 줄이거나 헤더를 이동하는 게 아니고
전체적인 콘텐츠를 위로 당긴다고 생각하면 되는데요
처음 스크롤할 때 배너가 사라지고 헤더가 fixed처리되는건 CSS sticky로 처리하면 되고
position: sticky가 안 돼요? 안 되는 이유 & 해결법
안녕하세요 찐망고입니다.더보기진짜 제가 CSS도 그렇구 HTML도 그렇구 피그마도 그렇고꽤 포스팅을 하는데왜 폰트만 검색되는거죠? 😭😭😭😭하지만 수업 내용을 공유하는게 목적인 블로그니
uiweb.tistory.com
이후 스크롤 할때 헤더가 사라지는 건 전체 콘텐츠가 위로 올라간다고 생각하면 됩니다.
이후 다시 위로 올라가면 콘텐츠가 내려오면서
자연스럽게 배너와 헤더가 보이는 거죠.
HTML코드
<div id="conatainer">
<div class="banner01">...</div>
<header>...</header>
...
</div>
CSS코드
/* body animation */
body {
transform: translateY(0);
transition: transform 0.4s ease-in-out;
}
body.scroll {
transform: translateY(-140px);
}
header {
position: sticky;
top: 0;
width: 100%;
}
JAVASCRIPT코드
let lastScrollY = 0; // 이전 스크롤 위치를 저장하는 변수
let ticking = false; // 현재 스크롤 위치와 비교하여 스크롤 방향 판단
function handleScrollDirection() {
if (!ticking) { // 이미 실행 중이라면 중복 호출 방지
requestAnimationFrame(() => { // 브라우저가 화면을 업데이트 하기전에 한번만 실행되도록 함
const body = document.body;
const scrollY = window.scrollY; // 현재스크롤위치
if (scrollY > 150 && scrollY > lastScrollY) { // 150px이상 스크롤 했고, 아래로 스크롤 중이면 scroll클래스 추가
body.classList.add("scroll");
} else {
body.classList.remove("scroll");
}
lastScrollY = scrollY; // 현재 스크롤 위치저장
ticking = false; // 다음 프레임에서 다시 실행할 수 있도록 초기화
});
ticking = true; // 애니메이션 프레임 요청중임을 표시
}
}
window.addEventListener("scroll", handleScrollDirection);
포인트만 잘 잡으면 코드는 쉬운데, 포인트를 못 잡으면 삽질할 확률이 높아요
Ai는 여러분의 코드를 빠르고 편하게 짤 수 있게 도와주지만
질문 포인트를 잘 못 잡으면 같이 삽질을 합니다 🤣
'WEB > JS코드' 카테고리의 다른 글
자바스크립트) 스크롤 이벤트를 활용한 배너의 absolute 와 fixed 설정 변경 (4) | 2024.09.27 |
---|---|
자바스크립트 탭) HTML5의 data-속성과 getAttribute() (1) | 2024.09.20 |
js)스크롤 이벤트 + SVG <animate> (0) | 2024.09.10 |
JavaScript로 클릭한 메뉴 항목에만 클래스 추가하기 (0) | 2024.05.28 |
자바스크립트 부드러운 top버튼 스크롤 이벤트 (2) | 2024.03.25 |