본문 바로가기
Javascript응용_Effect

Mouse Effect 04

by 코딩대원 2022. 9. 22.

마우스 이펙트

마우스 이펙트 네번째 시간입니다.


마우스 이펙트 04

중앙의 이미지내에서 마우스 커서를 따라 조금 흔들리는듯한 이미지 효과를 줬습니다.

01. HTML 코드

좌표값을 실시간으로 확인할 수 있도록 mouse__info값을 추가 해줬습니다.

{
    <main id="main">
    <section id="mouseType">
        <div class="mouse__cursor"></div>
        <div class="mouse__wrap">
            <figure>
                <img src="../assets/img/effect_bg13-min.jpg" alt="이미지">
                <figcaption>
                    <p>Experience is the best teacher.</p>
                    <p>경험은 최고의 스승이다.</p>    
                </figcaption>
            </figure>
        </div>
    </section>
  
    <div class="mouse__info">
        <ul>
            <li>mousePageX : <span class="mousePageX">0px</span><span>px</span></li>
            <li>mousePageY : <span class="mousePageY">0px</span><span>px</span></li>
            <li>centerPageX : <span class="centerPageX">0px</span><span>px</span></li>
            <li>centerPageY : <span class="centerPageY">0px</span><span>px</span></li>
        </ul>
    </div>
  </main>
} 

02. CSS 코드

이미지 크기를 110%로 늘려주고 트랜스폼 효과를 줬습니다.

{
    .mouse__wrap {
        width: 100%;
        height: 100vh;
        display: flex;
        align-items: center;
        justify-content: center;
        flex-direction: column;
        color: #fff;
        overflow: hidden;
    }
    .mouse__wrap figure {
        width: 50vw;
        height: 50vh;
        position: relative;
        overflow: hidden;
        transition: transform 500ms ease;
        cursor: none;
    }
    .mouse__wrap figure:hover {
        transform: scale(1.025);
    }
    .mouse__wrap figure img {
        position: absolute;
        left: -5%;
        top: -5%;
        width: 110%;
        height: 110%;
        object-fit: cover;
    }
    .mouse__wrap figure figcaption {
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%,-50%);
        text-align: center;
        font-size: 16px;
        white-space: nowrap;
        line-height: 1.4;
        font-weight: 300;
    }
    .mouse__cursor {
        position: absolute;
        left: 0;
        top: 0;
        width: 20px;
        height: 20px;
        background: #fff;
        border-radius: 50%;
        z-index: 1000;
        user-select: none;
        pointer-events: none;
    }
    .mouse__info {
        position: absolute;
        left: 20px;
        bottom: 10px;
        font-size: 14px;
        line-height: 1.6;
        color: #fff;
    } 
}

03. script 코드

1. 마우스이펙트 3번과 같이 getBoundingClientRect를 이용해서 좌표값을 객체로 불러오고 커서값을 중앙으로 맞춰줍니다.
2. 마우스 좌표값을 변수로 설정해줍니다.
3. 움직이게 될 centerPage값을 변수로 저장해줍니다.
centerPageX값 = window.innerWidth/2(고정값) - mousePageX(움직임에 따라 변하는 값)
centerPageY값 = window.innerHeight/2(고정값) - mousePageY(움직임에 따라 변하는 값)
4. imgMove 변수에 이미지를 저장합니다.
gsap 를 이용해서 이미지를 x축, y축으로 움직여줍니다.
마지막으로 움직임 효과가 너무 과하지 않게 값을 20으로 나눠줍니다.

{
    const cursor = document.querySelector(".mouse__cursor");
    const cursorRect = cursor.getBoundingClientRect();

    document.querySelector(".mouse__wrap figure").addEventListener("mousemove", (e) => {
      // 커서
      gsap.to(cursor, {
          duration: .5,
          left: e.pageX - cursorRect.width/2,
          top: e.pageY - cursorRect.height/2,
      });

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

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

      // 마우스 좌표 값 가운데로 초기화
      // 전체 길이/2 - 마우스 좌표값 == 0
      let centerPageX = window.innerWidth/2 -mousePageX;
      let centerPageY = window.innerHeight/2 -mousePageY;

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

      gsap.to(imgMove, {
          duration: 0.3,
          x: centerPageX/20,
          y: centerPageY/20,
      })

      //출력
      document.querySelector(".mousePageX").textContent = mousePageX;
      document.querySelector(".mousePageY").textContent = mousePageY;
      document.querySelector(".centerPageX").textContent = centerPageX;
      document.querySelector(".centerPageY").textContent = centerPageY;
    });
}

'Javascript응용_Effect' 카테고리의 다른 글

Search Effect 04  (3) 2022.09.29
Mouse Effect 05  (3) 2022.09.28
Mouse Effect 03  (4) 2022.09.22
Parallax Effect 05  (6) 2022.09.20
Mouse Effect 02  (5) 2022.09.18

댓글


HTML
CSS

JAVASCRIPT

자세히 보기