본문 바로가기
Effect

mouseEffect06

by 코터틀 2022. 9. 30.
반응형

mouseEffect06

마우스 이펙트06번 - 텍스트 효과 입니다. 마우스를 따라서 텍스트가 입체적으로 좌, 우로 움직이는 효과를 주었습니다.


HTML

mouse__text영역에 4개의 line 영역을 생성하여 slow, fast 2가지로 나누어주었습니다.
동일한 문장을 2개씩 만든 이유는 좌, 우로 나누어 거울 같은 효과를 유도했습니다.

<main id="main">
    <section id="mouseType">
        <div class="mouse__cursor"></div>
        <div class="mouse__wrap">
            <div class="mouse__img">
                <figure>
                    <img src="../assets/img/effect_bg11@2x-min.jpg" alt="이미지" />
                </figure>
            </div>
            <div class="mouse__text">
                <div class="line">
                    <div class="left">
                        <div class="spanWrap">
                            <span class="spanSlow"><em class="style1">Dreams</em> are</span>
                        </div>
                    </div>
                    <div class="right">
                        <div class="spanWrap">
                            <span class="spanSlow"><em class="style1">Dreams</em> are</span>
                        </div>
                    </div>
                </div>
                <div class="line">
                    <div class="left">
                        <div class="spanWrap">
                            <span class="spanFast">tomorrow's <em class="style1">reality.</em></span>
                        </div>
                    </div>
                    <div class="right">
                        <div class="spanWrap">
                            <span class="spanFast">tomorrow's <em class="style1">reality.</em></span>
                        </div>
                    </div>
                </div>
                <div class="line">
                    <div class="left">
                        <div class="spanWrap">
                            <span class="spanSlow"><em class="style1">꿈은</em> 내일의</span>
                        </div>
                    </div>
                    <div class="right">
                        <div class="spanWrap">
                            <span class="spanSlow"><em class="style1">꿈은</em> 내일의</span>
                        </div>
                    </div>
                </div>
                <div class="line">
                    <div class="left">
                        <div class="spanWrap">
                            <span class="spanFast"><em class="style1">현실이다.</em></span>
                        </div>
                    </div>
                    <div class="right">
                        <div class="spanWrap">
                            <span class="spanFast"><em class="style1">현실이다.</em></span>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </section>
</main>
<!-- //main -->

CSS

이미지 중앙 정렬 후 명언글에 기울기 효과와 영역을 설정합니다. 추가적으로 마우스 이벤트를 위한 CSS도 설정해줍니다.

/* mouseType */
.mouse__wrap {
    color: #fff;
    width: 100%;
    height: 100vh;
    cursor: none;
}

.mouse__img {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    z-index: -1;
}

.mouse__text {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -20%);
    font-size: 3vw;
    line-height: 1.5;
    font-weight: 800;
}

.mouse__text .line {
    width: 100%;
    display: flex;
}

.mouse__text .line .left {
    width: 50vw;
    color: orange;
    overflow: hidden;
    transform: skew(0deg, -15deg);
}

.mouse__text .line .left .spanWrap {
    width: 100vw;
    text-align: center;
}

.mouse__text .line .right {
    width: 50vw;
    overflow: hidden;
    transform: skew(0deg, 15deg);
}

.mouse__text .line .right .spanWrap {
    width: 100vw;
    text-align: center;
    transform: translateX(-50vw);
}

.mouse__text span {
    display: inline-block;
}

.mouse__cursor {
    position: absolute;
    left: 0;
    top: 0;
    width: 20px;
    height: 20px;
    z-index: 9999;
    border-radius: 50%;
    background-color: rgba(255, 255, 255, 0.9);
    user-select: none;
    pointer-events: none;
    transition: transform 0.3s;
}

.mouse__cursor.style1 {
    transform: scale(5);
    mix-blend-mode: difference;
}

JAVASCRIPT

positionSlow, positionFast 마우스 이동에 따라 텍스트가 움직일 속도를 설정합니다.
gsap로 부드러운 이동과 커서의 중앙부를 정렬 후 이벤트를 실행합니다.
명언에 중요 단어에 em태그를 주어 em태그에 mouseenter, mouseleave시 이벤트를 부여합니다.

const cursor = document.querySelector(".mouse__cursor");
const em = document.querySelectorAll(".mouse__text em");

const mouseMove = (e) => {
    let positionSlow = (e.pageX - window.innerWidth / 2) * 0.1;
    let positionFast = (e.pageX - window.innerWidth / 2) * 0.2;

    gsap.to(".spanSlow", { duration: 0.4, x: positionSlow });
    gsap.to(".spanFast", { duration: 0.4, x: -positionFast });
    gsap.to(".mouse__cursor", { duration: 0.3, left: e.pageX - 10, top: e.pageY - 10 });
};
window.addEventListener("mousemove", mouseMove);

em.forEach((em) => {
    em.addEventListener("mouseenter", () => {
        cursor.classList.add("style1");
    });
    em.addEventListener("mouseleave", () => {
        cursor.classList.remove("style1");
    });
});
반응형

'Effect' 카테고리의 다른 글

SearchEffect05  (0) 2022.09.30
parallax Effect06  (0) 2022.09.30
mouseEffect05  (11) 2022.09.28
SearchEffect04  (3) 2022.09.28
mouseEffect04  (11) 2022.09.22

댓글


광고 준비중입니다.