数値が変わっていくアニメーション

数値GSAP

0

カウントしながら目標の数値まで変わるアニメーションです。アニメーションの性質上、大きな数値への変化のほうが相性がいいです。

実装のポイント

数値の変化自体はGSAPを使うのが便利です。GSAPならオブジェクトのアニメーションも容易に可能です。

GSAPのCustomEaseを使って、アニメーションのイージングを調整し最初と最後をゆっくりし、中間はほぼ飛ばすようなイージングになっています。

同時に一瞬で変化する中間部分を見せないようCSSアニメーションでブラーをかけて数値が変化しているのを表しています。CSSアニメーションとGSAPのアニメーションの時間は揃えておく必要があります。

コード例

HTML

<p class="sampleText" data-target="10000" data-start="0">0</p>

CSS

.sampleText {
  &.isAnimation {
    animation: blurAnimation 8s ease-in-out;
  }
}

@keyframes blurAnimation {
  0% {
    filter: blur(0);
  }

  30% {
    filter: blur(0);
  }

  50% {
    filter: blur(16px);
  }

  70% {
    filter: blur(0);
  }

  100% {
    filter: blur(0);
  }
}

JavaScript

import { gsap } from "gsap";
import { CustomEase } from "gsap/CustomEase";
const DURATION = 8;

// カスタムイージング機能の登録
gsap.registerPlugin(CustomEase);

const element = document.querySelector(".sampleText");

// 初期値
const start = Number(element.dataset.start ?? 0);

// 目標値
const target = Number(element.dataset.target ?? 0);

const counter = { value: start };
element.textContent = String(start);

// イージング関数
const ease =
  "M0,0 C0.485,0 0.5,0 0.5,0.042 0.5,0.064 0.5,0.63 0.5,0.958 0.5,0.987 0.329,1 1,1 ";
  
gsap.to(counter, {
  value: target,
  duration: DURATION,
  ease: CustomEase.create("custom", ease),
  onStart: () => {
    element.classList.add("isAnimation");
  },
  onComplete: () => {
    element.classList.remove("isAnimation");
  },
  onUpdate: () => {
    element.textContent = String(Math.round(counter.value));
  },
});
Copyright Web Motion Catalog all rights reserved.