필요없는 목록/JAVASCRIPT

마우스 효과 4 / 5

비밀안 2023. 5. 3. 22:37
클릭

버튼을 클릭하면 명언이 나와요

-

이름이 나와요

최종 완성된 모습

저번에 배웠던 마우스 효과입니다.

이번거는 마우스가 특정 영역에서만 작동되게 만들었습니다.

HTML+CSS코드

 <style>
        #header { 
            /* position: relative; */
            z-index: 100;
        }
        .mouse__wrap {}
        .mouse__img {
            width: 100%;
            height: 100vh;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            overflow: hidden
        }
        .mouse__img figure {
            width: 50vw;
            height: 60vh;
            position: relative;
            overflow: hidden;
            background: red;
            box-shadow: 0 50px 100px rgba(0,0,0,0.3);
            border-radius: 5px;
            transition: transform 500ms ease;
            cursor: none;
        }
        .mouse__img figure:hover {
            transform: scale(1.025);
        }
        .mouse__img figure img {
            position: absolute;
            left: -5%;
            top: -5%;
            width: 110%;
            height: 110%;
            object-fit: cover;
            filter: sepia(60%) saturate(200%);
        }
        .mouse__img figure figcaption {
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%, -50%);
            text-align: center;
            font-size: 16px;
            line-height: 1.4;
        }
        .mouse__cursor {
            position: absolute;
            left: 0;
            top: 0;
            width: 20px;
            height: 20px;
            background-color: #fff;
            border-radius: 50%;
            z-index: 1000;
            user-select: none;
            pointer-events: none;
        }
    </style>
</head>

<body class="img04 bg02 font02">
    <header id="header">
        <h1>Javascript Mouse Effect01</h1>
        <p>마우스 이펙트 - 마우스 따라다니기</p>
        <ul>
            <li><a href="mouseEffect01.html">1</a></li>
            <li><a href="mouseEffect02.html">2</a></li>
            <li><a href="mouseEffect03.html">3</a></li>
            <li class="active"><a href="mouseEffect04.html">4</a></li>
            <li><a href="mouseEffect05.html">5</a></li>
        </ul>
    </header>
     <!-- //header -->
    <main id="main">
        <div class="mouse__wrap">
            <div class="mouse__cursor"></div>
            <div class="mouse__img">
                <figure>
                    <img src="./img/mouseffect07-min.jpg" alt="이미지">
                    <figcaption>
                        <p>Do not seek fancy things. What matters is your talent and the amount of love you pour into your actions.</p>
                        <p>화려한 일을 추구하지 말라. 중요한 것은 스스로의 재능이며, 자신의 행동에 쏟아 붓는 사랑의 정도이다.</p>
                    </figcaption>
                </figure>
            </div>
        </div>
    </main>
    <!-- //main -->
    <footer id="footer">
        <a href="mailto:skadldldl123@gmail.com">mailto:skadldldl123@gmail.com</a>
    </footer>
    <!-- //footer -->

코드 설명

1. div태그 중 .mouse__wrap은 "마우스를 따라다니는 div태그 2개와" / "가운데에 들어가는 Text"를 담고 있습니다.

 

2.

.mouse__cursor {
    position: absolute;
    left: 0;
    top: 0;
    width: 10px;
    height: 10px;
    z-index: 9999;
    border-radius: 50%;
    background-color: rgba(255, 255, 255, 0.3);
    /* 사용자가 텍스트를 선택 할 수 있는지*/
    user-select: none;
    pointer-events: none;
    transition: transform 0.3s;
}

div태그 중 .mouse__cursor은 제일 앞에 따라 다니는 조그만 모양입니다.

 

3.

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

div태그 중 .mouse__cursor2은 제일 뒤에 따라 다니는 큰 모양입니다.

 

4.

<div class="mouse__text">
    <p>Set a <span class="active3">goal</span> and try to achieve it. Don't be afraid of <span class="active1">failure</span> and try more.</p>
    <p><span class="active4">목표</span>를 세우고 그것을 이루기 위해 노력하라. <span class="active2">실패</span>를 두려워하지 말고 더 많이 시도하라</p>
</div>

div태그 중 .mouse__text는 화면 가운데에 있는 글씨 입니다.

p태그 안에 있는 span태그는 이제 마우스가 들어오면 모양이 변합니다.

 

JAVASCRIPT코드

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js"></script>
<script>
    document.querySelector(".mouse__img figure").addEventListener("mousemove", (e) => {
        gsap.to(".mouse__cursor", {
            duration: 0.2,
            left: e.pageX,
            top: e.pageY   
        });

        // 마우스 좌표 값
        let mousePageX = e.pageX;
        let mousePageY = e.pageY;

        // 전체 화면 가로 값
        window.innerWidth //1920 브라우저 크기
        window.outerWidth //1920 브라우저 크기(스크롤바 포함)
        window.screen.width //1920 화면 크기

        // 마우스 좌표값 기준점 가운데로 설정
        let centerPageX = window.innerWidth / 2 - mousePageX;
        let centerPageY = window.innerHeight / 2 - mousePageY;

        // 이미지 움직이기
        const imgMove = document.querySelector(".mouse__img figure img");
        imgMove.style.transform = "translate(" + centerPageX/20 + "px, " + centerPageY/20 + "px)";
    });     
</script>

코드 설명

1.document.querySelector(".mouse__img figure")는 CSS 선택자를 사용하여 클래스가 "mouse__img figure"인 요소를 선택합니다. 이 요소는 마우스 움직임에 따라 이미지를 움직일 대상입니다.

2.addEventListener("mousemove", (e) => {...})는 선택한 요소에 "mousemove" 이벤트를 추가합니다. 이벤트가 발생할 때마다 콜백 함수가 실행됩니다.

3.gsap.to(".mouse__cursor", {...})는 GSAP(GreenSock Animation Platform) 라이브러리를 사용하여 "mouse__cursor" 클래스를 가진 요소를 지정한 시간 동안 애니메이션으로 변경합니다. 이 경우, 요소의 위치를 마우스의 현재 좌표(e.pageX, e.pageY)로 설정합니다.

4.e.pageX와 e.pageY는 마우스 이벤트 객체에서 마우스 커서의 X 및 Y 좌표를 나타냅니다.

5.window.innerWidth, window.innerHeight, window.outerWidth, window.screen.width는 각각 브라우저 창의 내부 너비, 내부 높이, 외부 너비, 화면의 전체 너비를 나타냅니다.

6.let centerPageX = window.innerWidth / 2 - mousePageX;와 let centerPageY = window.innerHeight / 2 - mousePageY;는 마우스 좌표를 기준으로 중심점을 계산합니다. 이를 통해 마우스 커서가 화면의 중앙에 위치하도록 합니다.

7.imgMove.style.transform = "translate(" + centerPageX/20 + "px, " + centerPageY/20 + "px)";는 이미지 요소의 CSS transform 속성을 사용하여 이미지를 이동시킵니다. centerPageX와 centerPageY 값을 사용하여 이미지의 위치를 변경합니다. /20은 이동 거리를 조정하는 상수입니다. 이 값을 조정하여 이미지의 움직임 속도를 조절할 수 있습니다.