HTMLとJavaScriptでプログレスバーの実装(progress)
はじめに
プログレスバーとは、ダウンロードや何らかの処理の進捗を表示するバーのことです。
ゲームのインストール中などによく表示されます。
ここでは、HTMLの標準のprogressタグを使用して、プログレスバーの表示と進捗変更の処理を記載します。

プログレスバー
まずは以下が、プログレスバーのサンプルです。
スタートボタンを押下する事で、プログレスバーが動きます。
<progress id="prg" value="0" max="100"></progress><span id="parsent">0%</span><br />
<input type="button" id="btn" onclick="progressAct()" value="スタート">
<script>
// プログレスバーの進捗値
var val = 0;
// 一定間隔で処理を行うintervalのIDを保持
var intervalID;
// ボタンの状態(0: スタート, 1: ストップ, 2: 100%に到達)
var btnAct = 0;
const progressAct = () => {
if (btnAct === 2) {
// リセット
val = 0;
document.getElementById("parsent").innerText = `${val}%`;
}
if (btnAct === 1) {
btnAct = 0;
// ボタン文言変更
document.getElementById("btn").value = "スタート";
clearInterval(intervalID)
return;
} else {
btnAct = 1;
// ボタン文言変更
document.getElementById("btn").value = "ストップ";
}
// 50ms毎に実行
intervalID = setInterval(() => {
// プログレスバーに反映
val += 1;
document.getElementById("prg").value = val;
// 画面表示に反映
document.getElementById("parsent").innerText = `${val}%`;
// 100%で停止
if (val == 100) {
clearInterval(intervalID);
document.getElementById("btn").value = "スタート";
btnAct = 2;
}
}, 50);
}
</script>
上記のサンプルボタンのソースコードは以下です。
<progress id="prg" value="0" max="100"></progress><span id="parsent">0%</span><br />
<input type="button" id="btn" onclick="progressAct()" value="スタート">
<script>
// プログレスバーの進捗値
var val = 0;
// 一定間隔で処理を行うintervalのIDを保持
var intervalID;
// ボタンの状態(0: スタート, 1: ストップ, 2: 100%に到達)
var btnAct = 0;
const progressAct = () => {
if (btnAct === 2) {
// リセット
val = 0;
document.getElementById("parsent").innerText = `${val}%`;
}
if (btnAct === 1) {
btnAct = 0;
// ボタン文言変更
document.getElementById("btn").value = "スタート";
clearInterval(intervalID)
return;
} else {
btnAct = 1;
// ボタン文言変更
document.getElementById("btn").value = "ストップ";
}
// 50ms毎に実行
intervalID = setInterval(() => {
// プログレスバーに反映
val += 1;
document.getElementById("prg").value = val;
// 画面表示に反映
document.getElementById("parsent").innerText = `${val}%`;
// 100%で停止
if (val == 100) {
clearInterval(intervalID);
document.getElementById("btn").value = "スタート";
btnAct = 2;
}
}, 50);
}
</script>
progressタグの「value」が現在の進捗なので、JavaScriptでvalueを書き換えて進捗を更新しています