본문 바로가기
  • ANALOG CODE
  • AnalogCode
개발(인터렉티브)

자바스크립트 숫자 카운팅 애니메이션

by 아날로그코더 2023. 3. 30.
반응형

웹페이지에서 숫자가 그냥 나오는게 아니라 0부터 증가하면서 카운팅되는 효과를 본 적이 있을것이다. 이것은 어떻게 구현될까?

HTML, CSS 만 사용해서는 할 수 없을까란 고민을 해봤지만 불가능해보였다. 자바스크립트를 활용할 수 밖에 없는것이다.

 

 

단순 자바스크립트

단순하게 자바스크립트를 활용한다면 setTimeout 함수를 이용하여 값을 증가시키면서 엘리먼트의 innerHTML 값만 바꾸어주면 된다.

var counter = 0

function startCounter() {
  const e = document.querySelector('.text_box')
  counter ++
  e.innerHTML =  counter
  if (counter < 1000) {
    setTimeout(startCounter, 0)
  }
}

startCounter()

 

Anime.js 라이브러리

Anime.js 는 자바스크립트 애니메이션 라이브러리이다.

Anime.js 를 이용하여 자바스크립트에서 숫자 카운팅 애니메이션 효과를 아주 쉽게 만들 수 있다.

 

숫자 카운팅 효과 

아래는 샘플화면이다. start를 누르면 카운팅이 증가하고, stop을 누르면 카운팅이 멈춘다.

 

 

anime()

anime() 함수를 아래와 같이 호출하면 targets 엘리먼트에 애니메이션 효과가 나타난다.

anime({
    targets: '.text_box',
    innerHTML: [0, 1000], // 카운팅할 숫자의 범위
    round: 1,
    easing: 'linear',
    duration: 1000       // 애니메이션 지속시간
})

 

샘플 소스

아래는 전체 소스이다. 

<!DOCTYPE html>
<html>
<head>
  <script src="https://cdn.jsdelivr.net/npm/animejs@3.2.1/lib/anime.min.js"></script>
  <style>
    .main {
      background-color: grey;
      text-align:center;
      padding: 20px;
    }
    button {
      background:#1AAB8A;
      color:#fff;
      border:none;
      position:relative;
      height:60px;
      font-size:1.6em;
      padding:0 2em;
      cursor:pointer;
      transition:800ms ease all;
      outline:none;
    }
    .text_box {
      font-size: 50px;
    }
  </style>
</head>
<body>
  <div class="main">
	<div class="text_box"></div>
    <button class="startBtn">start</button>
    <button class="stopBtn">stop</button>
  </div>
<script>
  var a = anime({
    targets: '.text_box',
    innerHTML: [0, 1000],
    round: 1,
    easing: 'linear',
    duration: 1000
  })
  document.querySelector('.startBtn').onclick = a.play
  document.querySelector('.stopBtn').onclick = a.pause
</script>
</body>
</html>

 

이외에도 Anime.js에는 다양한 애니메이션 효과를 만들 수 있는 방법이 있다.

자세한 설명은 웹사이트의 공식 문서를 보면 다양한 효과의 데모를 볼 수 있다.

반응형

댓글