본문 바로가기
EFFECT

mouse 01

by 코빈_ 2022. 9. 18.

마우스 이펙트 01 (마우스 따라다니기)

이번에는 마우스에 효과를 넣은 이펙트를 코딩해봤습니다.

HTML

HTML은 기본적인 섹션안에 div 클래스를 잡아줍니다.

코드 보기
    <main id="main">
        <section id="mouseType">
            <div class="mouse__cursor"></div>
            <div class="mouse__wrap">
                <p>There's no <span class="style1">more</span> <span class="style2">excuse</span> than what you <span class="style3">don't do.</span></p>
                <p>니가 <span class="style4">안하는 것 뿐</span> 그 <span class="style5">이상</span>의 <span class="style6">핑계</span>는 없다.</p>
            </div>
        </section>

        <div class="mouse__info">
            <ul>
                <li>clientX : <span class="clientX">0</span>px</li>
                <li>clientY : <span class="clientY">0</span>px</li>
                <li>offsetX : <span class="offsetX">0</span>px</li>
                <li>offsetY : <span class="offsetY">0</span>px</li>
                <li>pageX : <span class="pageX">0</span>px</li>
                <li>pageY : <span class="pageY">0</span>px</li>
                <li>screenX : <span class="screenX">0</span>px</li>
                <li>screenY : <span class="screenY">0</span>px</li>
            </ul>
        </div>
    </main>

CSS

css는 기본적인 형태와 스타일을 잡아주지만, 이미지 개개인에 nth-child를 이용해여 개별 구역을 잡아줍니다.
또한, z-index를 사용하여 각 위치를 잡아줍니다.

코드 보기
    /* mouseType */
    .mouse__cursor {
        position: absolute;
        left: 0;
        top: 0;
        width: 50px;
        height: 50px;
        border-radius: 50%;
        border: 3px solid #fff;
        background-color: rgba(255, 255, 255, 0.1);
        user-select: none;
        pointer-events: none;
        transition: 
            background-color 0.25s,
            border-color 0.25s,
            transform 0.6s,
            border-radius 0.6s
        ;
    }
    .mouse__cursor.style1 {
        background-color: #dddddd30;
        border-color: #b0aaff;
    }
    .mouse__cursor.style2 {
        background-color: #dddddd30;
        border-color: #7671c5;
        transform: scale(1.3) rotateY(720deg);
    }
    .mouse__cursor.style3 {
        background-color: #dddddd30;
        border-color: #514c91;
        transform: scale(1.3) rotateX(720deg);
    }
    .mouse__cursor.style4 {
        background-color: #dddddd30;
        border-color: #5e5b88;
        transform: scale(5);
    }
    .mouse__cursor.style5 {
        background-color: #dddddd30;
        border-color: #352f88;
        transform: scale(0.5);
    }
    .mouse__cursor.style6 {
        background-color: #dddddd30;
        border-color: #554af0;
        border-radius: 0;
        transform: scale(3);
    }
    .mouse__wrap {
        width: 100%;
        height: 100vh;
        display: flex;
        align-items: center;
        justify-content: center;
        color: #fff;
        overflow: hidden;
        flex-direction: column;
        cursor: none;
    }
    .mouse__wrap p {
        font-size: 2vw;
        line-height: 2;
        font-weight: 300;
    }
    .mouse__wrap p:last-child {
        font-size: 3vw;
        font-weight: 300;
    }
    .mouse__wrap p span {
            border-bottom: 0.15vw dashed #666;
            color: #b0aaff;
        }
    @media(max-width: 800px) {
        .mouse__wrap p {
            padding: 0 20px;
            font-size: 20px;
            line-height: 1.5;
            text-align: center;
            margin-bottom: 10px;
        }
        .mouse__wrap p:last-child {
            font-size: 40px;
            line-height: 1.2;
            text-align: center;
            word-break: keep-all;
        }
    }

    .mouse__info {
        position: absolute;
        left: 20px;
        bottom: 10px;
        font-size: 14px;
        line-height: 1.6;
        color: #fff;
        list-style: none;
    }

script

마우스 커서에 각 좌표 값을 지정해주는 메서드와 마우스 커서에 지정해준 스타일을 작용해주기 위한 attr를 사용했습니다.

코드 보기
    window.addEventListener("mousemove", (event) => {
        document.querySelector(".clientX").innerText = event.clientX;
        document.querySelector(".clientY").innerText = event.clientY;
        document.querySelector(".offsetX").innerText = event.offsetX;
        document.querySelector(".offsetY").innerText = event.offsetY;
        document.querySelector(".pageX").innerText = event.pageX;
        document.querySelector(".pageY").innerText = event.pageY;
        document.querySelector(".screenX").innerText = event.screenX;
        document.querySelector(".screenY").innerText = event.screenY;
    });

    const cursor = document.querySelector(".mouse__cursor");

    window.addEventListener("mousemove", (e) => {
        cursor.style.left = e.clientX - 25 + "px";
        cursor.style.top = e.clientY - 25 + "px";
    });

    document.querySelectorAll(".mouse__wrap span").forEach(span => {
        let attr = span.getAttribute("class");

        span.addEventListener("mouseover", () => {
            cursor.classList.add(attr);
        });
        span.addEventListener("mouseout", () => {
            cursor.classList.remove(attr);
        });
    });


결과물

'EFFECT' 카테고리의 다른 글

parallax 05  (5) 2022.09.20
mouse 02  (2) 2022.09.18
Slider 04  (2) 2022.09.18
Slider 03  (2) 2022.09.18
parallax 04  (2) 2022.09.18

댓글


INFORMATION

javascript

css

html