카테고리 없음

스크롤 효과

Hyeon been 2023. 5. 15. 22:59
728x90

텍스트 분리하ㄱㅣ

        //텍스트 분리하기
        // let text = document.querySelector("#section1 .parallax__item__desc");
        // let splitText = text.innerText;
        // let splitWrap = splitText.split('').join('</span><span>');
        // text.innerHTML = splitWrap = "<span>" + splitWrap + "</span>";

        //모든 텍스트 분리
        let text = document.querySelectorAll(".split").forEach(text => {
            let splitText = text.innerText;
            let splitWrap = splitText.split('').join("</span><span aria-hidden='true'>");
            text.innerHTML = splitWrap = "<span aria-hidden='true'>" + splitWrap + "</span>";
            text.setAttribute("aria-label", splitText);
        });

텍스트 분리하기 #section1 .parallax__item__desc의 글자들을 한 글자씩 분리 하려합니다.

#section1 .parallax__item__desc를 text로 정의 해줍니다.

text.innerText 를 사용해 splitText에 입력합니다.

그 후 입력된  splitText에 split메소드를 사용해 (' ') 빈 문자열 마다 분리하고 join메소드를 사용해 </span><span>을 넣어 줍니다. 그러면 맨 앞과 뒤를 제외 하고 문자 마다 <span></span>가 들어가고  맨 앞과 맨뒤는 "<span>" + splitWrap + "</span>" 를 사용해 붙여 줍니다.

다음은  #section1 .parallax__item__desc의 문장 뿐 아니라 모든 섹션의 문장을 분리 하는 방법입니다.

let text = document.querySelectorAll(".split") split 클래스가 붙은 모든 곳에 forEach를 사용해 위와 같은 방법으로 정의해줍니다. 그리고 웹표준을 위해 aria-hidden=ture를 붙여 줍니다.

 

이질감 효과 표현하기

      function scroll(){
            let scrollTop = window.pageYOffset || document.documentElement.scrollTop;

            document.querySelectorAll(".parallax__item").forEach(item => {
                const target1 = item.querySelector(".parallax__item__img");
                const target2 = item.querySelector(".parallax__item__desc");
                const target3 = item.querySelector(".parallax__item__num");

                let offset1 = (scrollTop - item.offsetTop) * 0.1;
                let offset2 = (scrollTop - item.offsetTop) * 0.15;
                let offset3 = (scrollTop - item.offsetTop) * 0.2;

                // target1.style.transform = `translateY(${offset2}px)`;
                // target2.style.transform = `translateX(${offset1}px)`;
                gsap.to(target1, {duration: .3, y: offset1});
                gsap.to(target2, {duration: .3, y: offset2});
                gsap.to(target3, {duration: .3, y: offset3, ease: "expo.out"});
            });

            requestAnimationFrame(scroll);
        }
        scroll()