본문 바로가기
Effect

mouse Effect 01

by 🐬마뇽뇽 마뇽🦄 2022. 9. 12.
728x90

mouse Effect 01

마우스를 hover 했을 때, 지정한 위치에 따라 마우스 커서가 변화하는 이펙트를 공부해보았습니다.

01. HTML

마우스를 올렸을 때 변화하는 글귀를 작성했습니다.

👾 HTML 의 코드 보기
<header id="header" class="arir">
    <h1 class="Nix">Javascript Mouse Effect 01</h1>
    <p>마우스 이펙트 - 트랜지션 효과</p>
    <ul>
      <li class="active"><a href="mouseEffect01.html">1</a></li>
      <li><a href="mouseEffect02.html">2</a></li>
      <li><a href="mouseEffect03.html">3</a></li>
      <li><a href="mouseEffect04.html">4</a></li>
      <li><a href="mouseEffect05.html">5</a></li>
      <li><a href="mouseEffect06.html">6</a></li>
      <li><a href="mouseEffect07.html">7</a></li>
    </ul>
  </header>
  
  <main id="main">
    <section id="mouseType">
      <div class="mouse__cursor"></div>
      <div class="mouse__wrap">
        <p class="Nix">Numbing the <span class="style1">pain</span> for a while will <span class="style2">make it worse</span> when you <span class="style3">finally feel it.</span> </p>
        <p class="arir"><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>

02. Css

글귀의 위치마다 style을 바꿔, 여러가지 효과가 나오도록 하였습니다.

👾 CSS의 코드 보기
.mouse__wrap {
    width: 100%;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    color: #fff;
    overflow: hidden;
    cursor: none;
  }

  .mouse__wrap p {
    font-size: 1.5vw;
    line-height: 2;
    font-weight: 300;
  }

  .mouse__wrap p:last-child {
    font-size: 1.8vw;
    font-weight: 500;
  }

  .mouse__wrap p span {
    border-bottom: 0.05vw solid rgb(219, 73, 146);
    color: rgb(219, 73, 146);
  }
  

  @media( max-width : 800px){
      .mouse__wrap p {
          padding: 0 20px;
          font-size: 18px;
          line-height: 1.5;
          text-align: center;
          margin-bottom: 10px;
      }

      .mouse__wrap p:last-child {
        font-size: 24px;
        line-height: 1.5;
        text-align: center;
        word-break: keep-all;
      }
  }

  .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.3s,
    border-color 0.3s,
    transform 0.6s,
    rotate 0.3s,
    border-radius 0.3s ;
  }

  .mouse__cursor.style1 {
    background-color: rgba(238, 43, 173, 0.199);
    border-color: rgb(238, 43, 173);
  }

  .mouse__cursor.style2 {
    background-color: rgba(68, 56, 180, 0.247);
    border-color: rgb(68, 56, 180);
    transform: scale(2) rotateX(720deg);
  }

  .mouse__cursor.style3 {
    background-color: rgba(252, 217, 60, 0.219);
    border-color: rgb(252, 217, 60);
    transform: scale(1.5) rotateY(350deg);
  }

  .mouse__cursor.style4 {
    background-color: rgba(94, 201, 250, 0.178);
    border-color: rgb(94, 201, 250);
    transform: scale(3) rotateX(720deg);
  }

  .mouse__cursor.style5 {
    background-color: rgba(104, 241, 111, 0.192);
    border-color: rgb(104, 241, 111);
    transform: scale(2) rotate(720deg);
  }

  .mouse__cursor.style6 {
    background-color: rgba(60, 105, 252, 0.171);
    border-color: rgb(60, 105, 252);
    border-radius: 0;
  }

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

03. Javascript

마우스를 움직였을 때, 상대값 절대값 등의 위치 값이 나오도록 하였으며, 감싸진 span의 스타일 값에 따라 마우스를 hover 하였을 때 변화하도록 하였습니다.

👾 Javascript의 코드 보기
//마우스 위치 구하기
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";

});

//getAttribute 
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);
    });
    
});

728x90

'Effect' 카테고리의 다른 글

Parallax Effect04  (9) 2022.09.19
Slider Effect 04  (8) 2022.09.19
Parallax Effect 03  (3) 2022.09.12
Parallax Effect 02  (10) 2022.09.08
Parallax Effect 01  (6) 2022.09.06

고양이 고양이
고양이 고양이
고양이 고양이