티스토리 뷰
//el의 속성값 (a태그) href - 아이디 섹션값을 지정해서 클릭하면 부드럽게 이동하기
document.querySelectorAll("#parallax__nav li a").forEach(li =>{
li.addEventListener("click", (e)=>{
e.preventDefault();
document.querySelector(li.getAttribute("href")).scrollIntoView({
behavior: "smooth"
})
})
})
window.addEventListener("scroll",()=>{
let scrollTop = window.screenY || window.pageYOffset || document.documentElement.scrollTop;
//스크롤 값이 0 보다 크면 show 클래스를 추가
// if(scrollTop > 0){
// document.querySelector("#parallax__nav").classList.add("show");
// } else {
// document.querySelector("#parallax__nav").classList.remove("show");
// }
//스크롤 Y값 출력
document.querySelector(".srcollTop").innerText = Math.round(scrollTop);
//스크롤이 내려감에 따라서 액티브가 바뀌도록 하는 스크립트
// let nav = document.querySelectorAll("#parallax__nav ul li");
// for(let i =1; i<= nav.length; i++){
// if(scrollTop >= document.getElementById("section0"+ i).offsetTop -2){
// document.querySelectorAll("#parallax__nav ul li").forEach(li => {
// li.classList.remove("active");
// })
// document.querySelector("#parallax__nav ul li:nth-child("+i+")").classList.add("active");
// }
// }
//forEach
document.querySelectorAll(".content__item").forEach((e,i)=>{
if (scrollTop >= e.offsetTop -2){
document.querySelectorAll("#parallax__nav ul li").forEach( li => {
li.classList.remove("active")
})
document.querySelector("#parallax__nav li:nth-child("+(i+1)+")").classList.add("active")
}
})
});
//스크롤 값에 따라 메뉴 클래스 show의 추가/삭제.
let nowScroll = true;
let lastScroll = 0;
function scrollProgress(){
nowScroll = true;
//setInterval 함수를 사용해서 빠르게 반복.
setInterval(() => {
if(nowScroll){
nowScroll = false;
//0.3초안에 false로 바뀌는 순간마다 hasScroll 함수를 실행.
hasScroll();
}
}, 300);
console.log(nowScroll);
}
function hasScroll(){
let scrollTop = window.screenY || window.pageYOffset || document.documentElement.scrollTop;
//scrollTop(현재 스크롤 값)이 lastScroll보다 작으면 = 스크롤이 올라갈 때. (위로 갈 때.)
if(scrollTop < lastScroll){
document.querySelector("#parallax__nav").classList.add("show");
} else {
document.querySelector("#parallax__nav").classList.remove("show");
}
lastScroll = scrollTop; //두 값이 같아야 바로 이전의 스크롤 값이 구해진다.
// console.log("lastScroll :" + lastScroll)
// console.log("scrollTop :" + scrollTop)
}
window.addEventListener("scroll",scrollProgress); //스크롤 하면 scrollProgress 함수가 실행.
이번예제는 스크롤이 움직이는 값에 따라 메뉴가 숨겨졌다가 나왔다가 하는 이펙트 입니다.
현재 스크롤 값이 이전 스크롤 보다 작으면 ( 스크롤이 올라갈 때) show 클래스가 추가됩니다.
반대로, 값이 크면( 스크롤이 내려갈 때) show 클래스가 삭제됩니다.
lastScroll = scrollTop . 이렇게 두 값이 같아야 바로 이전의 스크롤 값이 현재 스크롤 값으로 구해집니다.
그리고 setInterval 함수를 이용해서 nowScroll이 true로 나오는 함수를 실행하는데 반복되는 순간마다 false로 나오게 해준뒤 그 순간 hasScroll 함수가 작동되게 해줍니다.
'Script Sample > Parallax Effect' 카테고리의 다른 글
패럴랙스 이펙트06. : 텍스트 효과 (0) | 2022.03.08 |
---|---|
패럴랙스 이펙트05. : 이질감 효과 (0) | 2022.03.08 |
패럴랙스 이펙트04. : 나타나기 (0) | 2022.03.08 |
패럴랙스 이펙트 02. 사이드 메뉴 (0) | 2022.03.07 |
패럴랙스 이펙트 01. 메뉴이동 (0) | 2022.03.07 |
댓글
© 2018 webstoryboy