初級 jQuery プラグイン クラス操作

円グラフのプラグイン Circliful:レッスンの進み具合を表示する

全4回のレッスンの「完了」ボタンを押すと、進み具合が円グラフに反映されます。クラスの付け外しで状態を管理し、完了数を数えてグラフを更新する考え方を学びます。

このサンプルは2017〜2018年ごろに作成したものです。PHPのバージョンが上がり、そのままでは動かなくなっていたため、2026年に PHP 8.3 で動くように書き直し、解説も新しくしました。

DEMO 実際に動かしてみよう

はじめての表計算 全4回

  • 第1回 表を作ってみよう
  • 第2回 足し算と合計
  • 第3回 グラフを作る
  • 第4回 印刷のしかた

完了したレッスン:0 / 4回
進み具合:0%

解説コードを読んでみよう

このサンプルでわかること

  • クラスの付け外し(toggleClass)で「完了/未完了」の状態を持たせる方法
  • 条件に合う要素の数を数えて、割合(%)を計算する方法
  • 計算した値を円グラフに反映する方法

円グラフのプラグイン Circliful の基本的な使い方は、ひとつ前のサンプル「ボタンで1%ずつ増やす」で解説しています。ここでは、それを「レッスンの進み具合」に応用します。

使っているファイル

  • lesson.phpデモのページ
  • js/jquery.circliful.jsCircliful 本体
  • css/jquery.circliful.cssCircliful 用の CSS

1. HTML:レッスンの一覧と完了ボタン

4つのレッスンに、それぞれ class="switch" のボタンを付けています。ボタンが「完了」かどうかは、ボタンに ON というクラスが付いているかどうかで表します。

lesson.php(15〜30行目) PHP
<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") で今の状態を調べ、ボタンの文字を変えています。

lesson.php(47〜52行目) PHP
  // ② 完了ボタンを押したら、完了/未完了を切り替える
  $("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 をかければ進み具合(%)です。

lesson.php(54〜64行目) PHP
  // ③ 完了数を数えて、グラフと数字を更新する
  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)
11 ÷ 4 × 10025%90
22 ÷ 4 × 10050%180
44 ÷ 4 × 100100%360(1周)

以前のバージョンでは、押すたびに「+25」「−25」と足し引きしていました。今回は毎回、画面の状態から数え直すようにしています。こうするとレッスンを5回・6回と増やしても計算を直す必要がなく、数字がずれる心配もありません。

このページの完了状態は、ページを再読み込みすると消えてしまいます。データベースに保存して、再読み込みしても残るようにしたのが次のサンプル「進み具合をデータベースに保存する」です。

↑