
💚 스크롤이 특정 위치에 도달하면 header 스타일 변경
💚 .scrollTop() : 현재 스크롤 위치 가져오기
💚 .offset() : 문서(document) 기준으로 특정 요소의 위치를 가져오는 jQuery 메서드
🩵 기준이 되는 특정 요소에 class/id 값 지정
🔹 here이라는 클래스를 지정해줬다.
<body>
<!-- 상세 코드 생략 --!>
<section class="here"></section>
</body>
🩵 $(window).scroll() : 현재 화면에서 스크롤 할 때, 이벤트 실행
🩵 .scrollTop() : 현재 스크롤 위치(Y축) 가져오기
🔹 .scrollTop(값) : 500 등 수치값을 명시하면 해당 값(위치)만큼 스크롤 이동
🩵 .offset() : 문서(document) 기준으로 특정 요소의 위치를 가져오는 jQuery 메서드
🔹 .offset().top : 특정요소의 세로(Y축) 위치 가져오기
🔹 .offset().left : 특정요소의 가로(X축) 위치 가져오기
🔹 .offset({ top: 값, left: 값 }) : 특정요소 위치 변경
🩵 alert를 예시로하여 1회만 이벤트를 실행시켜야 할 때, flag 사용
🔹 초기 값으로 flag = false; 셋팅
🔹 flag == false의 조건이 true일 때 조건문 실행
🔹 flag 변수명에 true 값을 재할당하여 true값으로 바꿈 -> 해당 조건문이 재실행될 때 flag == false 조건을 통과하지 못하여 alert가 반복실행되지 않음.
<script>
let flag = false; // 한 번만 실행되도록 제어하는 변수
$(window).scroll(function () {
curr=$(this).scrollTop(); // 현재 스크롤 위치 가져오기
target=$('.here').offset().top; // 특정요소(.here)의 y축 위치 가져오기
if (curr >= target) {
// 현재 스크롤 위치가 .here의 y축 위치 보다 클 때 (.here 요소가 스크롤에 의해 위로 올라갔음을 의미)
$('header').addClass('on'); // 스타일을 변경할 요소에 클래스 추가
// 한 번만 실행되는 알림
if(flag == false){
alert('1회실행');
flag = true
}
} else {
$('header').removeClass('on'); // 스타일을 변경할 요소에 클래스 제거
}
});
</script>
🩵 변경할 요소의 스타일만 잘 명시해주면 된다.
gsap 라이브러리로도 구현할 수 있는 모션이지만, 스크립트에 의존하지 않고도 바닐라스크립트로 직접 작성할 수 있는 방법이다.
.offset()과 .scrollTop() 메서드만 제대로 알면 손쉽게 구현할 수 있었다!