jQueryで実装!数字のカウントアップ・カウントダウンアニメーション

jQueryで実装!数字のカウントアップ・アニメーション

jQueryのanimate()メソッドを利用して、数値を「0」から目標値までカウントアップ(またはダウン)させる実装方法を解説します。実績数や統計データを動的に見せたい場合に有効です。

完成デモ

以下の「Result」タブで、ボタン操作による動作を確認できます。

実装コード

HTML、CSS、JavaScript(jQuery)の構成は以下の通りです。

1. HTML

数値表示用のspanと操作用ボタンを配置します。

<div class="card">
	<div class="card-body">
		<div id="price">
			<span>0</span>
		</div>
		<p>
			<button id="price_up" class="btn btn-raised btn-success mb-2">数値を100増やす</button>
			<button id="price_down" class="btn btn-raised btn-success mb-2">数値を100減らす</button>
		</p>
	</div>
</div>

2. CSS

レイアウトとボタンの装飾です。

.card {
    word-wrap: break-word;
    background-clip: border-box;
    background-color: #fff;
    border: 1px solid hsla(0,0%,9%,.125);
    border-radius: 0.25rem;
    display: flex;
    flex-direction: column;
    min-width: 0;
    position: relative;
    color: #333;
    text-align: center;
}

.card-body {
    flex: 1 1 auto;
    padding: 1rem;
    font-size: 30px;
}

.btn-success {
    background-color: #198754;
    border-color: #198754;
    color: #fff;
    cursor: pointer;
    padding: 0.5em 1em;
    border-radius: 0.25rem;
    margin: 0 5px;
}

3. JavaScript (jQuery)

ここがアニメーションの核となる部分です。

通常、.animate()はCSS(幅や透明度など)を操作しますが、ここでは数値データそのものを徐々に変化させる手法をとっています。一時的なオブジェクト{count: price}を作成し、その数値を目標値まで変化させながら、画面上の数字を更新しています。

<!-- jQueryライブラリ本体(読込済みの場合は不要) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

<script>
$(function() {
	var price = 0; // 現在の数値を保持する変数

	// ■カウントアップ処理
	$('#price_up').click(function(){
		// {count: 現在値} から {count: 目標値} までアニメーションさせる
		$({count: price}).animate({count: price+100}, {
			duration: 1000, 
			easing: 'linear',
			// progress: アニメーションの途中で毎回実行される関数
			progress: function() {
				// 変化途中の値(this.count)を整数に丸めて表示
				$('#price span').text(Math.ceil(this.count));
			}
		});
		price += 100; // 内部の数値を更新
	});

	// ■カウントダウン処理
	$('#price_down').click(function(){
		if (price <= 0) return false;

		$({count: price}).animate({count: price-100}, {
			duration: 1000,
			easing: 'linear',
			progress: function() {
				$('#price span').text(Math.ceil(this.count));
			}
		});
		price -= 100;
	});
});
</script>

コードのポイント:

  • 仮想プロパティのアニメーション: DOM要素(HTMLタグ)ではなく、{count: price} というデータ上の数値をアニメーションさせています。
  • progress オプション: 値が変化するたびに実行され、現在のアニメーション進行中の値を画面(#price span)に書き込みます。
  • Math.ceil(): そのままだと小数点以下の細かい数値が表示されてしまうため、切り上げて整数にしています。

よくある質問(FAQ)

ページ読み込み時に自動実行するには?

クリックイベントではなく、即時実行される関数内に記述します。


$(function() {
    var target = 1000;
    $({count: 0}).animate({count: target}, {
        duration: 2000,
        easing: 'swing',
        progress: function() {
            $('#price span').text(Math.ceil(this.count));
        }
    });
});

jQueryなし(Vanilla JS)で実装可能ですか?

可能です。requestAnimationFramesetIntervalを使用して数値加算と描画更新のループ処理を記述します。jQueryのanimateメソッドを利用する方がコード量は少なくて済みます。

動きに緩急(イージング)をつけたい場合は?

標準ではlinear(等速)とswing(緩急あり)が使えます。さらに複雑な動きが必要な場合は、「jQuery Easing Plugin」などのプラグイン導入が必要です。

CONTACT

webサイト制作、デザインに関するご相談、御見積のご依頼など、弊社へのお問い合わせはこちら