今回の記事では、JavaScriptを使用して数字を0から9999までカウントアップするアニメーションを実装する方法について解説します。
記事にナンバリングをしていたり、アンケート結果の数字をアニメーションさせたりもできます!
数字の上限が確定している場合
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>数字を画面中央に設置する</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh; /* 画面全体の高さを利用する */
margin: 0;
}
.counter {
font-size: 3rem;
font-weight: bold;
}
</style>
</head>
<body>
<div class="counter" id="counter">0</div>
<script>
document.addEventListener("DOMContentLoaded", function() {
const counterElement = document.getElementById("counter");
let count = 0;
const target = 9999;
const interval = 10; // 10ミリ秒ごとにカウントアップする
const incrementCounter = setInterval(() => {
if (count <= target) {
counterElement.textContent = count;
count++;
} else {
clearInterval(incrementCounter);
}
}, interval);
});
</script>
</body>
</html>
html
<div class="counter" id="counter">0</div>
上記のコード内の数字がカウントアップされます。
CSS
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh; /* 画面全体の高さを利用する */
margin: 0;
}
.counter {
font-size: 3rem;
font-weight: bold;
}
CSS部分では、body
要素をflex
ボックスとして設定し、画面の中央に要素を配置するスタイルを追加しています。.counter
クラスは数字の表示部分に適用されるスタイルです。
JavaScript
JavaScriptでは、数字をカウントアップする処理を実装します。
document.addEventListener("DOMContentLoaded", function() {
const counterElement = document.getElementById("counter");
let count = 0;
const target = 9999;
const interval = 10; // 10ミリ秒ごとにカウントアップする
const incrementCounter = setInterval(() => {
if (count <= target) {
counterElement.textContent = count;
count++;
} else {
clearInterval(incrementCounter);
}
}, interval);
});
解説
DOMContentLoaded
イベントリスナー内で、counterElement
変数で数字を表示する要素を取得します。count
変数で現在のカウントを保持し、target
で最終的なカウントの目標値を設定します。setInterval
関数を使用して、指定した間隔(interval
ミリ秒)ごとにカウントアップを行います。カウントが目標値に達したら、clearInterval
で処理を停止します。
サンプル
上記のコードを利用したものが下記となります。
See the Pen Counter_test1 by kasasagi_kmnmc (@kasasagi_kmnmc) on CodePen.
0から9999までカウントアップされるようになっております。
上限が決まった数にカウントアップしたい場合は便利ですね。
ただ、スクリプトの方に上限の数値を設定しているため(この場合は9999)決まっていない数字(例えばですがランダムやナンバリングの場合)はカウントアップされないので注意が必要です。
それらを踏まえ、HTML内の数字をカウントアップするコードを用意しました。
数字の上限が決まっていない場合
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>カウンターアニメーション</title>
<style>
.counter {
font-size: 3rem;
font-weight: bold;
}
</style>
</head>
<body>
<div class="counter" id="counter">9999</div>
<script>
document.addEventListener("DOMContentLoaded", function() {
const counterElement = document.getElementById("counter");
const target = parseInt(counterElement.textContent, 10);
let count = 0;
const interval = 1; // ミリ秒単位でインクリメント間隔を指定
const incrementCounter = setInterval(() => {
if (count <= target) {
counterElement.textContent = count;
count++;
} else {
clearInterval(incrementCounter);
}
}, interval);
});
</script>
</body>
</html>
HTML
<div class="counter" id="counter">9999</div>
このコードでは、div
タグの中にクラス名counter
とIDcounter
を持つ要素を作成しています。
この要素が、カウントアップする数字を表示します。
JavaScript
document.addEventListener("DOMContentLoaded", function() {
const counterElement = document.getElementById("counter");
const target = parseInt(counterElement.textContent, 10);
let count = 0;
const interval = 1; // ミリ秒単位でインクリメント間隔を指定
const incrementCounter = setInterval(() => {
if (count <= target) {
counterElement.textContent = count;
count++;
} else {
clearInterval(incrementCounter);
}
}, interval);
});
解説
DOMContentLoaded
イベントリスナーを使用して、ページの読み込みが完了した後にスクリプトが実行されるようにします。counter
要素を取得し、そのテキスト内容を整数に変換して目標値として設定します。count
変数を0に初期化します。setInterval
関数を使用して、指定された間隔(ミリ秒)でカウントアップを実行します。count
が目標値に達するまで、count
をインクリメントしてカウンター要素のテキスト内容を更新します。- 目標値に達したら、
clearInterval
を呼び出してカウントアップを停止します。
サンプル
HTML内の<div class=”counter” id=”counter”>9999</div>の「9999」部分を上限に0からカウントアップされるようになります。
See the Pen Counter_test2 by kasasagi_kmnmc (@kasasagi_kmnmc) on CodePen.
カウント数が少ない場合は「const interval = 1; // ミリ秒単位でインクリメント間隔を指定」部分を修正してください。
まとめ
このように簡単なHTMLとJavaScriptを使用してカウンターアニメーションを実装することができます。WordPressの記事をナンバリングしていたり、アンケート結果の数字をアニメーションさせたい場合に有効ですので、シーンに合わせてご利用下さい!