JAVASCRIPT/자바스크립트

parallaxEffect06 - 텍스트 효과

(*ᴗ͈ˬᴗ͈)ꕤ*.゚ 2022. 3. 10. 18:23

개요

텍스트를 하나씩 올라오게 한다

쟤들을 하나씩 다 떼야 한다

 

HTML 구성

<main id="parallax__cont">
    <div id="contents">
        <section id="section1" class="content__item">
            <span class="content__item__num">01</span>
            <h2 class="content__item__title">Section1</h2>
            <figure class="content__item__imgWrap">
                <div class="content__item__img"></div>
            </figure>
            <p class="content__item__desc">나 자신에 대한 자신감을 잃으면 온 세상이 나의 적이 된다.</p>
        </section>
        <!-- //section1 -->

자바스크립트를 통해 p 태그의 글자 하나하나를 떼어주고, 각각에 span태그를 붙여준다

 

JS 구성 : 글자 쪼개기

1. 글씨가 들어간 부분을 각각 선택합니다.

document.querySelectorAll(".content__item__desc").forEach(desc => {});

2. 변수를 선언합니다

splitText: desc의 내용을 선택합니다

splitWrap: 각각의 글자들 사이사이에 join()을 사용하여 스판태그를 넣어줍니다.

 

그리곤,

splitWrap 맨 앞과 맨 뒤에 스판 태그를 넣어줍니다.

        document.querySelectorAll(".content__item__desc").forEach(desc => {
            let splitText = desc.innerText;
            let splitWrap = splitText.split('').join("</span><span aria-hidden='true'>");
                splitWrap = "<span aria-hidden='true'>" + splitWrap + "</span>";
        });

3. splitWrap을 p태그에 넣어줍니다.

 그리고 웹표준성에 어긋나지 않게 해줍니다

        document.querySelectorAll(".content__item__desc").forEach(desc => {
            let splitText = desc.innerText;
            let splitWrap = splitText.split('').join("</span><span aria-hidden='true'>");
                splitWrap = "<span aria-hidden='true'>" + splitWrap + "</span>";
                desc.innerHTML = splitWrap;
                desc.setAttribute("aria-label", splitText);
        });

 

JS 구성 : 스크롤 했을 때 나타나게 하기

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

    document.querySelectorAll(".content__item").forEach(item => {
        if(scrollTop > item.offsetTop -400){
            item.querySelectorAll(".content__item__desc span").forEach((span, index) => {
                setTimeout(() => {
                span.classList.add("show");
                }, 50 * (index + 1))
            })
        }
    })

    requestAnimationFrame(scroll);
}
scroll();

여기서 눈 여겨 볼 점은 setTimeout을 사용하는 것이다

스크롤이 되었을 때 span 각각에다가show를 붙여주지만, 0.05간격으로 붙여준다

 

링크 https://sungilryuu.github.io/webs_class/javascript/effect/parallaxEffect06.html