scrollTop과 offsetTop을 이용하여 패랠랙스 스크로링 효과를 완성하였습니다.

jQuery

// $(window).scroll(function(){
    //     const scrollTop = $(window).scrollTop() +$(window).height()/2 ;

    //     //출력용
    //     $(".scrollTop").text(parseInt(scrollTop));
    //     $(".s1OffsetTop").text( parseInt($("#section1").offset().top));
    //     $(".s2OffsetTop").text( parseInt($("#section2").offset().top));
    //     $(".s3OffsetTop").text( parseInt($("#section3").offset().top));
    //     $(".s4OffsetTop").text( parseInt($("#section4").offset().top));
    //     $(".s5OffsetTop").text( parseInt($("#section5").offset().top));
    //     $(".s6OffsetTop").text( parseInt($("#section6").offset().top));
    //     $(".s7OffsetTop").text( parseInt($("#section7").offset().top));
    //     $(".s8OffsetTop").text( parseInt($("#section8").offset().top));
    //     $(".s9OffsetTop").text( parseInt($("#section9").offset().top));

    //     //출력용 글씨 색

    //     if(scrollTop > $("#section1").offset().top) {
    //         $(".s1OffsetTop").css("color","red");
    //     } else {
    //         $(".s1OffsetTop").css("color","white");
    //     }
    //     if(scrollTop > $("#section2").offset().top) {
    //         $(".s2OffsetTop").css("color","red");
    //     } else {
    //         $(".s2OffsetTop").css("color","white");
    //     }
    //     if(scrollTop > $("#section3").offset().top) {
    //         $(".s3OffsetTop").css("color","red");
    //     } else {
    //         $(".s3OffsetTop").css("color","white");
    //     }
    //     if(scrollTop > $("#section4").offset().top) {
    //         $(".s4OffsetTop").css("color","red");
    //     } else {
    //         $(".s4OffsetTop").css("color","white");
    //     }
    //     if(scrollTop > $("#section5").offset().top) {
    //         $(".s5OffsetTop").css("color","red");
    //     } else {
    //         $(".s5OffsetTop").css("color","white");
    //     }
    //     if(scrollTop > $("#section6").offset().top) {
    //         $(".s6OffsetTop").css("color","red");
    //     } else {
    //         $(".s6OffsetTop").css("color","white");
    //     }
    //     if(scrollTop > $("#section7").offset().top) {
    //         $(".s7OffsetTop").css("color","red");
    //     } else {
    //         $(".s7OffsetTop").css("color","white");
    //     }
    //     if(scrollTop > $("#section8").offset().top) {
    //         $(".s8OffsetTop").css("color","red");
    //     } else {
    //         $(".s8OffsetTop").css("color","white");
    //     }
    //     if(scrollTop > $("#section9").offset().top) {
    //         $(".s9OffsetTop").css("color","red");
    //     } else {
    //         $(".s9OffsetTop").css("color","white");
    //     }

    //     //나타나기
    //     if(scrollTop > $("#section1").offset().top){
    //         $("#section1").addClass("show");
    //     } else {
    //         $("#section1").removeClass("show");
    //     }
    //     if(scrollTop > $("#section2").offset().top){
    //         $("#section2").addClass("show");
    //     } else {
    //         $("#section2").removeClass("show");
    //     }
    //     if(scrollTop > $("#section3").offset().top){
    //         $("#section3").addClass("show");
    //     } else {
    //         $("#section3").removeClass("show");
    //     }
    //     if(scrollTop > $("#section4").offset().top){
    //         $("#section4").addClass("show");
    //     } else {
    //         $("#section4").removeClass("show");
    //     }
    //     if(scrollTop > $("#section5").offset().top){
    //         $("#section5").addClass("show");
    //     } else {
    //         $("#section5").removeClass("show");
    //     }
    //     if(scrollTop > $("#section6").offset().top){
    //         $("#section6").addClass("show");
    //     } else {
    //         $("#section6").removeClass("show");
    //     }
    //     if(scrollTop > $("#section7").offset().top){
    //         $("#section7").addClass("show");
    //     } else {
    //         $("#section7").removeClass("show");
    //     }
    //     if(scrollTop > $("#section8").offset().top){
    //         $("#section8").addClass("show");
    //     } else {
    //         $("#section8").removeClass("show");
    //     }
    //     if(scrollTop > $("#section9").offset().top){
    //         $("#section9").addClass("show");
    //     } else {
    //         $("#section9").removeClass("show");
    //     }

    // });

    //for문
    // $(window).scroll(function(){
    //     const scrollTop = $(window).scrollTop() +$(window).height()/2 ;
    //     $(".scrollTop").text(parseInt(scrollTop));
        
    //     for(let i=1; i<10; i++){
    //         //출력용
    //         $(".s"+i+"OffsetTop").text( parseInt($("#section"+i).offset().top));
    //         if(scrollTop > $("#section"+i).offset().top) {
    //             $(".s"+i+"OffsetTop").css("color","red");
    //             $("#section"+i).addClass("show");
    //         } else {
    //             $(".s"+i+"OffsetTop").css("color","white");
    //             $("#section"+i).removeClass("show");
    //         }
    //     }
    // });
       
    //each()
    $(window).scroll(function(){
        const scrollTop = $(window).scrollTop()+$(window).height()/2 ;
        $(".scrollTop").text(parseInt(scrollTop));

        $(".content-item").each(function(num){
            $(".s"+(num+1)+"OffsetTop").text( parseInt($(this).offset().top));
            if(scrollTop > $(this).offset().top) {
                $(".s"+(num+1)+"OffsetTop").css("color","red");
                $(this).addClass("show");
            } else {
                $(".s"+(num+1)+"OffsetTop").css("color","white");
                $(this).removeClass("show");
            }
        });
    });  

Javascript

// $(window).scroll(function(){
//     const scrollTop = $(window).scrollTop()
// });
window.addEventListener("scroll",function(){
    let pageYOffset = window.pageYOffset + screen.height/2;
    //출력용
    document.querySelector(".pageYOffset").innerText = parseInt(pageYOffset);
    // document.querySelector(".s1OffsetTop").innerText = document.getElementById("section1").offsetTop;
    // document.querySelector(".s2OffsetTop").innerText = document.getElementById("section2").offsetTop;
    // document.querySelector(".s3OffsetTop").innerText = document.getElementById("section3").offsetTop;
    // document.querySelector(".s4OffsetTop").innerText = document.getElementById("section4").offsetTop;
    // document.querySelector(".s5OffsetTop").innerText = document.getElementById("section5").offsetTop;
    // document.querySelector(".s6OffsetTop").innerText = document.getElementById("section6").offsetTop;
    // document.querySelector(".s7OffsetTop").innerText = document.getElementById("section7").offsetTop;
    // document.querySelector(".s8OffsetTop").innerText = document.getElementById("section8").offsetTop;
    // document.querySelector(".s9OffsetTop").innerText = document.getElementById("section9").offsetTop;
    for(let i=1; i<=9; i++){
        document.querySelector(".s"+i+"OffsetTop").innerText = document.getElementById("section"+i).offsetTop;
    }
    //출력용 글씨 색
    // if( pageYOffset > document.getElementById("section1").offsetTop ){
    //     document.querySelector(".s1OffsetTop").style.color = "red";
    // } else {
    //     document.querySelector(".s1OffsetTop").style.color = "white";
    // }
    // if( pageYOffset > document.getElementById("section2").offsetTop ){
    //     document.querySelector(".s2OffsetTop").style.color = "red";
    // } else {
    //     document.querySelector(".s2OffsetTop").style.color = "white";
    // }
    // if( pageYOffset > document.getElementById("section3").offsetTop ){
    //     document.querySelector(".s3OffsetTop").style.color = "red";
    // } else {
    //     document.querySelector(".s3OffsetTop").style.color = "white";
    // }
    // if( pageYOffset > document.getElementById("section4").offsetTop ){
    //     document.querySelector(".s4OffsetTop").style.color = "red";
    // } else {
    //     document.querySelector(".s4OffsetTop").style.color = "white";
    // }
    // if( pageYOffset > document.getElementById("section5").offsetTop ){
    //     document.querySelector(".s5OffsetTop").style.color = "red";
    // } else {
    //     document.querySelector(".s5OffsetTop").style.color = "white";
    // }
    // if( pageYOffset > document.getElementById("section6").offsetTop ){
    //     document.querySelector(".s6OffsetTop").style.color = "red";
    // } else {
    //     document.querySelector(".s6OffsetTop").style.color = "white";
    // }
    // if( pageYOffset > document.getElementById("section7").offsetTop ){
    //     document.querySelector(".s7OffsetTop").style.color = "red";
    // } else {
    //     document.querySelector(".s7OffsetTop").style.color = "white";
    // }
    // if( pageYOffset > document.getElementById("section8").offsetTop ){
    //     document.querySelector(".s8OffsetTop").style.color = "red";
    // } else {
    //     document.querySelector(".s8OffsetTop").style.color = "white";
    // }
    // if( pageYOffset > document.getElementById("section9").offsetTop ){
    //     document.querySelector(".s9OffsetTop").style.color = "red";
    // } else {
    //     document.querySelector(".s9OffsetTop").style.color = "white";
    // }
    //글씨색 출력용
    for(let i=1; i<=9; i++){
        if( pageYOffset > document.getElementById("section"+i).offsetTop ){
            document.querySelector(".s"+i+"OffsetTop").style.color = "red";
        } else {
            document.querySelector(".s"+i+"OffsetTop").style.color = "white";
        }
    }
    //나타나기
    // if( pageYOffset > document.getElementById("section1").offsetTop){
    //     document.getElementById("section1").classList.add("show");
    // } else {
    //     document.getElementById("section1").classList.remove("show");
    // }
    // if( pageYOffset > document.getElementById("section2").offsetTop){
    //     document.getElementById("section2").classList.add("show");
    // } else {
    //     document.getElementById("section2").classList.remove("show");
    // }
    // if( pageYOffset > document.getElementById("section3").offsetTop){
    //     document.getElementById("section3").classList.add("show");
    // } else {
    //     document.getElementById("section3").classList.remove("show");
    // }
    // if( pageYOffset > document.getElementById("section4").offsetTop){
    //     document.getElementById("section4").classList.add("show");
    // } else {
    //     document.getElementById("section4").classList.remove("show");
    // }
    // if( pageYOffset > document.getElementById("section5").offsetTop){
    //     document.getElementById("section5").classList.add("show");
    // } else {
    //     document.getElementById("section5").classList.remove("show");
    // }
    // if( pageYOffset > document.getElementById("section6").offsetTop){
    //     document.getElementById("section6").classList.add("show");
    // } else {
    //     document.getElementById("section6").classList.remove("show");
    // }
    // if( pageYOffset > document.getElementById("section7").offsetTop){
    //     document.getElementById("section7").classList.add("show");
    // } else {
    //     document.getElementById("section7").classList.remove("show");
    // }
    // if( pageYOffset > document.getElementById("section8").offsetTop){
    //     document.getElementById("section8").classList.add("show");
    // } else {
    //     document.getElementById("section8").classList.remove("show");
    // }
    // if( pageYOffset > document.getElementById("section9").offsetTop){
    //     document.getElementById("section9").classList.add("show");
    // } else {
    //     document.getElementById("section9").classList.remove("show");
    // }
    //한번에 나타나기
    document.querySelectorAll(".content-item").forEach(elem => {
        if(pageYOffset > elem.offsetTop){
            elem.classList.add("show");
        } else {
            elem.classList.remove("show");
        }
    });
});

scrollTop을 이용하여 이질감 효과를 완성하였습니다.

Javascript

window.addEventListener("scroll",()=>{
    let pageYOffset = (window.pageYOffset || document.documentElement.scrollTop);
    // let offset1 = (pageYOffset - document.getElementById("section1").offsetTop) * 0.2;
    // let offset2 = (pageYOffset - document.getElementById("section2").offsetTop) * 0.2;
    // let offset3 = (pageYOffset - document.getElementById("section3").offsetTop) * 0.2;
    // let offset4 = (pageYOffset - document.getElementById("section4").offsetTop) * 0.2;
    // let offset5 = (pageYOffset - document.getElementById("section5").offsetTop) * 0.2;
    // let offset6 = (pageYOffset - document.getElementById("section6").offsetTop) * 0.2;
    // let offset7 = (pageYOffset - document.getElementById("section7").offsetTop) * 0.2;
    // let offset8 = (pageYOffset - document.getElementById("section8").offsetTop) * 0.2;
    // let offset9 = (pageYOffset - document.getElementById("section9").offsetTop) * 0.2;

    // document.querySelector("#section1 .content-item-desc").style.transform = "translateY("+ -offset1 +"px)";
    // document.querySelector("#section2 .content-item-desc").style.transform = "translateY("+ -offset2 +"px)";
    // document.querySelector("#section3 .content-item-desc").style.transform = "translateY("+ -offset3 +"px)";
    // document.querySelector("#section4 .content-item-desc").style.transform = "translateY("+ -offset4 +"px)";
    // document.querySelector("#section5 .content-item-desc").style.transform = "translateY("+ -offset5 +"px)";
    // document.querySelector("#section6 .content-item-desc").style.transform = "translateY("+ -offset6 +"px)";
    // document.querySelector("#section7 .content-item-desc").style.transform = "translateY("+ -offset7 +"px)";
    // document.querySelector("#section8 .content-item-desc").style.transform = "translateY("+ -offset8 +"px)";
    // document.querySelector("#section9 .content-item-desc").style.transform = "translateY("+ -offset9 +"px)";

    // for(let i = 1; i<=9; i++){
    //     let offset = (pageYOffset - document.getElementById("section"+i).offsetTop) * 0.2;
    //     document.querySelector("#section"+i+" .content-item-desc").style.transform = "translateY("+ -offset +"px)";
    // }

    document.querySelectorAll(".content-item").forEach((elem)=>{
        // console.log(elem);
        let target = elem.childNodes[7];
        let offset = (pageYOffset - elem.offsetTop)*0.2;
        target.style.transform = "translateY("+ -offset +"px)";
    })

});

jQuery

$(window).scroll(function(){
    let scrollTop = $(window).scrollTop();

    // let offset1 = (scrollTop - $("#section1").offset().top);
    // let offset2 = (scrollTop - $("#section2").offset().top);
    // let offset3 = (scrollTop - $("#section3").offset().top);
    // let offset4 = (scrollTop - $("#section4").offset().top);
    // let offset5 = (scrollTop - $("#section5").offset().top);
    // let offset6 = (scrollTop - $("#section6").offset().top);
    // let offset7 = (scrollTop - $("#section7").offset().top);
    // let offset8 = (scrollTop - $("#section8").offset().top);
    // let offset9 = (scrollTop - $("#section9").offset().top);

    // $("#section1 .content-item-desc").css({transform:"translateX("+offset1+"px)"});
    // $("#section2 .content-item-desc").css({transform:"translateX("+offset2+"px)"});
    // $("#section3 .content-item-desc").css({transform:"translateX("+offset3+"px)"});
    // $("#section4 .content-item-desc").css({transform:"translateX("+offset4+"px)"});
    // $("#section5 .content-item-desc").css({transform:"translateX("+offset5+"px)"});
    // $("#section6 .content-item-desc").css({transform:"translateX("+offset6+"px)"});
    // $("#section7 .content-item-desc").css({transform:"translateX("+offset7+"px)"});
    // $("#section8 .content-item-desc").css({transform:"translateX("+offset8+"px)"});
    // $("#section9 .content-item-desc").css({transform:"translateX("+offset9+"px)"});

    //for문
    // for(let i=1; i<=9; i++){
    //     let offset = (scrollTop - $("#section"+i).offset().top);
    //     $("#section"+i+" .content-item-desc").css({transform:"translateX("+offset+"px)"});
    // }

    //each문
    $(".content-item").each(function(){
        let offset1 = (scrollTop - $(this).offset().top)*0.1;
        let offset2 = (scrollTop - $(this).offset().top)*0.2;
        
        $(this).find(".content-item-desc").css({transform:"translateY("+ -offset2+"px)"});
        $(this).find(".content-item-num").css({transform:"translateY("+offset1+"px)"});
        $(this).find(".content-item-img").css({transform:"translateY("+offset2+"px)"});
    })
    //출력용
    $(".scrollTop").text(scrollTop);
});

gsap애니메이션을 이용하여 효과를 완성했습니다.

Javascript

let pageYOffset = window.pageYOffset;
const scroll = () => {
    const newPageYOffset = window.pageYOffset;
    const different = newPageYOffset - pageYOffset;
    console.log("scrollTop :" + pageYOffset);
    console.log("newScrollTop :" + newPageYOffset);
    console.log("different :" + different);
    let target = document.querySelectorAll(".content-item-imgWrap");
    //target.style.transform = "rotate("+different+"deg)";
    //forEach
    // target.forEach((elem)=>{
    //     elem.style.transform = "rotate("+different+"deg)";
    // });
    gsap.to(".content-item-imgWrap", { skewY:different*0.1 , duration:.3 , ease: Power1.ease });
    gsap.to(".content-item-num", { skewY:different*0.1 , duration:.6 , ease: Power1.ease });
    gsap.to(".content-item-desc", { skewX:different*0.2 , duration:.6 , ease: Power4.ease });
    pageYOffset = newPageYOffset;
    requestAnimationFrame(scroll);
}
scroll();

jQuery

let scrollTop = $(window).scrollTop();
function scroll(){
        const newScrollTop = $(window).scrollTop();
        const different = newScrollTop-scrollTop;

        console.log("scrollTop :"+scrollTop);
        console.log("newScrollTop :"+newScrollTop);
        console.log("different :"+different);
        // gsap.to(".animation01",{x: leftWidth,rotation: 360, borderRadius:5, scale:2, duration:2});

        gsap.to(".content-item-imgWrap",{duration: .3, skewY: different * 0.2, ease: Power1.ease});
        gsap.to(".content-item-num",{duration: .6, x: different * 3, ease: Power1.ease});
        gsap.to(".content-item-desc",{duration: .1, y: different , ease: Power4.ease});

        scrollTop = newScrollTop;
    requestAnimationFrame(scroll);
}
scroll();

split을 이용하여 한글자씩 효과를 주었습니다.

jQuery

$(".content-item-desc").each(function(){
    let text = $(this).text();
    let split = text.split("").join("

Javascript

document.querySelectorAll(".content-item-desc").forEach(elem=>{
    let splitText = elem.innerText;
    let splitWrap = splitText.split("").join("");
        splitWrap = ""+splitWrap+""

    elem.innerHTML = splitWrap;
    elem.setAttribute("aria-label",splitText);
});

window.addEventListener("scroll", () => {
    let pageYOffset = (window.pageYOffset || document.documentElement.scrollTop);
    if(pageYOffset > document.getElementById("section1").offsetTop){
        document.querySelectorAll("#section1 .content-item-desc span").forEach((elem,index)=>{
            setTimeout(()=>{
                elem.classList.add("show");
            },50 * (index + 1));
        });
    }
    if(pageYOffset > document.getElementById("section2").offsetTop){
        document.querySelectorAll("#section2 .content-item-desc span").forEach((elem,index)=>{
            setTimeout(()=>{
                elem.classList.add("show");
            },50 * (index + 1));
        });
    }
    if(pageYOffset > document.getElementById("section3").offsetTop){
        document.querySelectorAll("#section3 .content-item-desc span").forEach((elem,index)=>{
            setTimeout(()=>{
                elem.classList.add("show");
            },50 * (index + 1));
        });
    }
    if(pageYOffset > document.getElementById("section4").offsetTop){
        document.querySelectorAll("#section4 .content-item-desc span").forEach((elem,index)=>{
            setTimeout(()=>{
                elem.classList.add("show");
            },50 * (index + 1));
        });
    }
    if(pageYOffset > document.getElementById("section5").offsetTop){
        document.querySelectorAll("#section5 .content-item-desc span").forEach((elem,index)=>{
            setTimeout(()=>{
                elem.classList.add("show");
            },50 * (index + 1));
        });
    }
    if(pageYOffset > document.getElementById("section6").offsetTop){
        document.querySelectorAll("#section6 .content-item-desc span").forEach((elem,index)=>{
            setTimeout(()=>{
                elem.classList.add("show");
            },50 * (index + 1));
        });
    }
    if(pageYOffset > document.getElementById("section7").offsetTop){
        document.querySelectorAll("#section7 .content-item-desc span").forEach((elem,index)=>{
            setTimeout(()=>{
                elem.classList.add("show");
            },50 * (index + 1));
        });
    }
    if(pageYOffset > document.getElementById("section8").offsetTop){
        document.querySelectorAll("#section8 .content-item-desc span").forEach((elem,index)=>{
            setTimeout(()=>{
                elem.classList.add("show");
            },50 * (index + 1));
        });
    }
    if(pageYOffset > document.getElementById("section9").offsetTop){
        document.querySelectorAll("#section9 .content-item-desc span").forEach((elem,index)=>{
            setTimeout(()=>{
                elem.classList.add("show");
            },50 * (index + 1));
        });
    }
});

패럴럭스 스크롤링효과를 주었습니다.

jQuery

$("a[href^='#']").click(function(e){
    e.preventDefault();
    let target = $($(this).attr("href"));
    $("html,body").animate({scrollTop : target.offset().top}, 800, "easeInOutQuint");
});

Javascript

document.querySelectorAll("a[href^='#']").forEach(elem => {
    elem.addEventListener("click", e => {
        e.preventDefault();
        document.querySelector(elem.getAttribute('href')).scrollIntoView({
            behavior : 'smooth'
        })
    });
});

리빌효과를 주었습니다.

jQuery

$(window).scroll(function(){
    let scrollTop = $(window).scrollTop();
    
    $(".reveal").each(function(){
        if( scrollTop + $(window).height()/2 > $(this).offset().top ){
            $(this).addClass("show");
        }
    });
});

Javascript

function scrollReveal(){
    const reveal = document.querySelectorAll(".reveal");
    reveal.forEach(elem => {
        let scrollTop = document.documentElement.scrollTop + window.innerHeight/2;
        let offsetTop = elem.offsetTop + elem.parentElement.offsetTop;
        console.log(offsetTop);

        if(scrollTop > offsetTop){
            elem.classList.add("show");
        }
    })
}
window.addEventListener("scroll",scrollReveal)

확인하기