본문 바로가기

아래로 스크롤 해주세요!

My Reference Book

-

제가 배웠던것을 한곳에 정리해보았어요!

HTML

HTML 태그 톺아보기

HTML

자세히보기

CSS

CSS 속성 톺아보기

CSS

자세히보기

JAVASCRIPT

JS 실행문 톺아보기

JAVASCRIPT

자세히보기

최신댓글

CSS 애니메이션

마우스를 따라가는 눈알 효과 만들어보기!

by C0Di 2022. 9. 26.
728x90

공이 돌아가는 애니메이션을 구현해보자~!

이번에는 눈알이 마우스를 따라 돌아가는 효과를 한번 구현해볼게요!!


HTML 코드

html 코드는 별로 작성할게 없습니다
하단과 같이 작성 후 원하는 글자를 .text 클래스에 작성해 커스텀 하면 되더라구요!

<div class="wrapper">
  <div class="card">
    <div class="me">
      <div class="eye"></div>
    </div>
    <div class="text">ABCDE</div>
  </div>
</div>

CSS 코드

기본 적으로 모든 요소가 가운데에 정렬되고 살을 붙여주기 위해 하단과 같이 css 코드를 작성합니다.

*{
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html, body{
  height: 100%;
  overflow: hidden;
}

.wrapper{
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 369px;
  height: 547px;
  transform-style: preserve-3d;
  perspective: 600px;
}

.me{
  position: absolute;
  width: 369px;
  height: 547px;
  transform: translateZ(80px) scale(0.8);
}

.me::before,
.me::after{
  position: absolute;
  content: '';
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  border-radius: 10px;
  background: url(http://www.supah.it/dribbble/006/profile.png) no-repeat 0 0;
}

.me::after {
  height: 30px;
  top: auto;
  bottom: -15px;
  filter: blur(15px);
  background-size: 100% 30px;
  border-radius: 100px;
  
}

.eye, .eye::before{
  width: 70px;
  height: 70px;
  position: absolute;
  top: 175px;
  left: 119px;
  z-index: -1;
  background: url(http://www.supah.it/dribbble/006/eye.png)
}

.eye::before{
  content: '';
  top: -3px;
  left: 99px; 
}

.text{
  position; absolute;
  left: 0;
  top: 0;
  z-index: 2;
  width: 390px;
  height: 595px;
  transform: translatez(150px) translatex(-11px) translatey(-26px) scale(.55);
  border: 3px solid #fff;
  text-align: center;
  line-height: 1000px;
  color: #fff;
  opacity: 0.3;
  border-radius: 15px;
  background: linear-gradient(135deg, #fff 0%, rgba(255,255,255,0.36) 39%, rgba(255,255,255,0) 51%, #000 100%)
}

.text::after {
  content: 'eye moving';
  width: 100%;
  position: absolute;
  bottom: 22px;
  left: 0;
  z-index: 1;
  line-height: 1;
  font-size: 18px;
  text-align: center;
  text-transform: uppercase;
  letter-spacing: 20px;
  text-indent: 20px;
}

JS 코드

1. wrap이라는 변수에 .wrapper 클래스를 담아 가운데에 고정시켜준뒤
2. 브라우저의 중심을 기준으로 마우스가 위치한 좌표의 값을 구한 뒤
3. 각각 wrap(.wrapper) 와 eye(.eye) 변수에 translate를 통해
4. 이를 통해 마우스를 따라 눈이 움직이고 카드가 같이 움직이는 듯한 효과를 줍니다!

const wrap = document.querySelector('.wrapper');
  const eye = document.querySelector('.eye');
  const speed = 1;
  let x = 0;
  let y = 0;
  let followX = 0;
  let followY = 0;
  function animate() {
    x += (followX - x) * speed;
    y += (followY - y) * speed;
    eye.style.transform = `translate(${-x}px, ${-y}px)`;
    wrap.style.transform = `translate(-50%,-50%) perspective(600px) rotateX(${-y}deg) rotateY(${-x}deg)`;
    requestAnimationFrame(animate);
  }
  window.addEventListener('mousemove', (e) => {
    let mouseX = Math.max(-100, Math.min(100,window.innerWidth / 2 - e.clientX));
    let mouseY = Math.max(-100, Math.min(100,window.innerHeight / 2 - e.clientY));
     followX = (12 * mouseX) / 100;
     followY = (10 * mouseY) / 100;
  });
  window.addEventListener('keydown', (e)=>{
    switch(e.keyCode) {
      case 37:
        followX = 12;
        break;
      case 38:
        followY = 10;
        break;
      case 39:
        followX = -12;
        break;
      case 40:
        followY = -10;
        break;
      default:
        break;
    }
  });
  animate()

왼성!

완성하고 나니까 많이 기괴하네요 ㅋㅋㅋㅋㅋㅋㅋ

728x90
반응형

댓글

#HASH_TAGS

-

1

오늘은 내가바로 오징어! 멈추지 않는 ' j ' 시리-즈 내일은 즐거운 월요일 제이쿼리 코딩 코드 ImageSlideEffect scroll-snap-align 오늘 조업 마감했습니다. HTML 슬라이드 결과 : 월요일 울적하니 꽃을 달아봤습니다 선택해주세요 다크모드 화사한가요? 오징어 두마리 포획 완료 메서드 scroll-snap-type 오늘도 웹표준은.. 오징어 한마리 수확 완료! 오징어 1Kg 당 3000원 Method 공부 숙제가 다양해서 너무 좋아요 필터선택자 이건 또 뭐람 JQuery