느낌이 좋은 애니메이션으로 숫자의 가산점을 실현하고 싶어요.

11813 단어 HTMLJavaScriptCSS
이것은 정보 도형 등을 통해 숫자를 계수하려고 할 때 유용할 수 있는 노트다.↓ 이런 느낌을 원한다.

샘플용 일반 HTML
<div class="container">
  <p id="count" data-from="0" data-to="4096">0</p>
  <button id="button">Start!</button>
</div>

setInterval에서 개수


우선 솔직하게setInterval 실시해 보자.대체로 계산은 됐지만 아무래도 무미건조한 인상을 주는 것 같다.
const DURATION = 3600
const el = {
  count: document.getElementById('count'),
  button: document.getElementById('button')
}

el.button.addEventListener('click', e => {
  const from = parseInt(el.count.dataset.from, 10)
  const to = parseInt(el.count.dataset.to, 10)
  const startTime = Date.now()

  const timer = setInterval(() => {
    const elapsedTime = Date.now() - startTime
    const progress = elapsedTime / DURATION

    if (progress < 1) {
      el.count.textContent = Math.floor(from + progress * (to - from))
    } else {
      el.count.textContent = to
      clearInterval(timer)
    }
  }, 16)
})
See the Pen CountUp Animation setInterval by noplan1989 ( @noplan1989 ) on CodePen .

동작이 완급하다.


setInterval의 동작은 비교적 단조롭기 때문에 완급에 주의해야 한다p>

애니메이션을 느리게 하려면 Tween계의 프로그램 라이브러리를 사용해서 효과적일 것 같아서 이번에 선택했습니다TweenMaxp>

TweenMax는 원소 속성뿐만 아니라 일반 대상에도 사용할 수 있기 때문에 숫자 계수에 적용됩니다.왕 씨 어르신 덕분에 나는 비로소 완급해졌고, 내 피가 이미 해를 넘긴 것 같았다p>
이 예에서 저는 InOut 계열의 Eding을 선택했습니다. 여러분께 보여드리려면 Out 계열의 Eding이 좋을 것 같습니다.p>

const DURATION = 3.6
const el = {
  count: document.getElementById('count'),
  button: document.getElementById('button')
}

el.button.addEventListener('click', e => {
  const from = parseInt(el.count.dataset.from, 10)
  const to = parseInt(el.count.dataset.to, 10)
  let obj = {count: from}

  TweenMax.to(obj, DURATION, {
    count: to,
    ease: Power3.easeInOut,
    onUpdate: () => {
      el.count.textContent = Math.floor(obj.count)
    }
  })
})

See the Pen CountUp Animation TweenMax by noplan1989 ( @noplan1989 ) on CodePen .



フォントを等幅にする


속도가 좀 느리긴 하지만 숫자의 모양을 의식할 수도 있다.전문 서체라면 서체의 폭이 각기 다르기 때문에 어떻게든 변형될 수 있다p>

디자인이 허락된다면 등폭의 글씨체로 바꾸세요.Google fonts도 다양해요.br/>
https://fonts.google.com/?category=Monospace



index.html

<!-- Google Fontsから読み込み-->
<link href="https://fonts.googleapis.com/css?family=Roboto+Mono" rel="stylesheet">



index.css

.count {
  font-family: 'Roboto Mono', monospace;
}


See the Pen CountUp Animation monospace by noplan1989 ( @noplan1989 ) on CodePen .



대체로 괜찮은 것 같아요.br/>
현장에서부터 그렇습니다.


좋은 웹페이지 즐겨찾기