ペンギンの開発日記

主にWeb開発

JavaScriptで星評価(レーティング)の実装

はじめに

JavaScriptでの星評価(レーティング)実装方法です。
開発しているレビューサイトに実装したく、作ってみました。

実装

See the Pen Rating by Penguin-Island (@Penguin-Island) on CodePen.

色変化の概要

クリックをする前は、マウスオーバー/マウスアウトによる色変化を起こします。
しかし一度クリックをすると、色変化を起こさないようにしています。
未クリックかクリック済かの状態を、変数clickedにもたせます。

var clicked = false; //未クリック

マウスオーバー/マウスアウトイベントによる色変化

クリックが一度もされていない場合(clicked==false)のとき、マウスオーバー/マウスアウトによる色変化を起こします。

    stars[i].addEventListener(
      "mouseover",
      () => {
        if (!clicked) { //クリックが一度もされていないとき
          for (let j = 0; j <= i; j++) { //星1から上にカーソルがある星まで
            stars[j].style.color = "#f0da61"; //黄色に
          }
        }
      },
      false
    );

    stars[i].addEventListener(
      "mouseout",
      () => {
        if (!clicked) { //クリックが一度もされていないとき
          for (let j = 0; j < stars.length; j++) { //星1から星5まで
            stars[j].style.color = "#a09a9a"; //グレーに
          }
        }
      },
      false
    );

クリックイベントによる色変化

クリックがされた場合、上記のマウスオーバー/マウスアウトイベントによる色変化は起こらないようになります。
再びクリックした場合、クリックした星とその手前の星が黄色に、以降の星がグレーになります。

        stars[i].addEventListener("click", () => {
            clicked = true; //クリック済
            for (let j = 0; j <= i; j++) {  //星1からクリックされた星まで
                stars[j].style.color = "#f0da61"; //黄色に
            }
            for (let j = i + 1; j < stars.length; j++) {  //クリックされた星の次から星5まで
                stars[j].style.color = "#a09a9a";  //グレーに
            }
        }, false);

おわりに

星の数の増減が簡単なため、3つにしたり10つにしたりアレンジして使えます。
完成してみると単純でしたが、どうすればできるのか悩むのが楽しかったです。