解説コードを読んでみよう
このサンプルでわかること
- クラスの付け外し(
toggleClass)で「完了/未完了」の状態を持たせる方法 - 条件に合う要素の数を数えて、割合(%)を計算する方法
- 計算した値を円グラフに反映する方法
円グラフのプラグイン Circliful の基本的な使い方は、ひとつ前のサンプル「ボタンで1%ずつ増やす」で解説しています。ここでは、それを「レッスンの進み具合」に応用します。
使っているファイル
- lesson.phpデモのページ
- js/jquery.circliful.jsCircliful 本体
- css/jquery.circliful.cssCircliful 用の CSS
1. HTML:レッスンの一覧と完了ボタン
4つのレッスンに、それぞれ class="switch" のボタンを付けています。ボタンが「完了」かどうかは、ボタンに ON というクラスが付いているかどうかで表します。
<div class="row">
<div class="col-md-6 col-xs-12">
<h2>はじめての表計算 全4回</h2>
<ul class="lessons">
<li>第1回 表を作ってみよう <button type="button" class="btn switch">未完了</button></li>
<li>第2回 足し算と合計 <button type="button" class="btn switch">未完了</button></li>
<li>第3回 グラフを作る <button type="button" class="btn switch">未完了</button></li>
<li>第4回 印刷のしかた <button type="button" class="btn switch">未完了</button></li>
</ul>
<p>完了したレッスン:<b id="cmp">0</b> / 4回<br>
進み具合:<b id="ratio">0</b>%</p>
</div>
<div class="col-md-6 col-xs-12">
<div id="circle" style="width:260px; max-width:100%;"></div>
</div>
</div>
2. ボタンを押したら状態を切り替える
toggleClass("ON") は、ON クラスが付いていなければ付け、付いていれば外します。そのあと hasClass("ON") で今の状態を調べ、ボタンの文字を変えています。
// ② 完了ボタンを押したら、完了/未完了を切り替える
$("button.switch").on("click", function(){
$(this).toggleClass("ON"); // ON というクラスを付けたり外したり
$(this).text($(this).hasClass("ON") ? "完了済" : "未完了"); // ボタンの文字も切り替え
update();
});
条件 ? A : B は「条件が正しければ A、そうでなければ B」という短い if 文です(三項演算子といいます)。
3. 完了数を数えて、グラフを更新する
$("button.switch.ON").length で「ON が付いたボタンの数」=完了したレッスンの数がわかります。全体の数で割って 100 をかければ進み具合(%)です。
// ③ 完了数を数えて、グラフと数字を更新する
function update() {
var total = $("button.switch").length; // レッスンの数(4)
var cmp = $("button.switch.ON").length; // 完了したレッスンの数
var ratio = Math.round(cmp / total * 100); // 進み具合(%)
$("#circle .circle").attr("stroke-dasharray", (ratio * 3.6) + ", 20000");
$("#circle .number").text(ratio);
$("#cmp").text(cmp);
$("#ratio").text(ratio);
}
| 完了数 | 計算 | 進み具合 | 線の長さ(× 3.6) |
|---|---|---|---|
| 1 | 1 ÷ 4 × 100 | 25% | 90 |
| 2 | 2 ÷ 4 × 100 | 50% | 180 |
| 4 | 4 ÷ 4 × 100 | 100% | 360(1周) |
以前のバージョンでは、押すたびに「+25」「−25」と足し引きしていました。今回は毎回、画面の状態から数え直すようにしています。こうするとレッスンを5回・6回と増やしても計算を直す必要がなく、数字がずれる心配もありません。
このページの完了状態は、ページを再読み込みすると消えてしまいます。データベースに保存して、再読み込みしても残るようにしたのが次のサンプル「進み具合をデータベースに保存する」です。