javascript buttonの色をクリック時に変更する

javascript buttonの色をクリック時に変更する

javascriptで、buttonの色をボタンをクリックした時に変更するサンプルコードを掲載してます。ブラウザはchromeを使用しています。

環境

  • OS windows11 pro 64bit
  • Apache 2.4.43
  • ブラウザ chrome 104.0.5112.81

クリックイベント取得

「addEventListener」の「click」を使用すると、クリックイベント取得が可能なので、これを利用して、「style.backgroundColor」を変更します。

※「addEventListener」では、ハンドラー(コールバック関数)の中の「this」は要素への参照となります。

<button id="main">変更</button>

<script>

'use strict';

document.getElementById('main').addEventListener('click',
  function () {
    this.style.backgroundColor = "#3fb811";
  }
)

</script>

実行結果

「handleEvent」をメソッドとしてもつオブジェクトを使用することも可能です。

document.getElementById('main').addEventListener('click',{
  handleEvent: function (event) {
    event.target.style.backgroundColor = "#3fb811";
  }
}, false);

「onclick」を使用しても同じです。

<button id="main">変更</button>

<script>

document.getElementById('main').onclick = function () {
  this.style.backgroundColor = "#3fb811";
};

</script>

クラスを使用

クラスを使用して、変更することも可能です。

<style>
    .foo{
        background-color: #3fb811; 
    }
</style>

<button id="main">変更</button>

<script>

document.getElementById('main').onclick = function () {
    this.className = "foo" ;
};

</script>

「toggle」を使用すれば、クリックするごとに色を切り替えることもできます。

<style>
    .foo{
        background-color: #3fb811; 
    }
</style>

<button id="main">変更</button>

<script>

document.getElementById('main').onclick = function () {
    this.classList.toggle('foo');
};

</script>

実行結果

コードの簡潔化

また、以下のコードを、

document.getElementById('main').onclick = function () {
  this.style.backgroundColor = "#3fb811";
};

document.getElementByIdの省略と関数をアロー化して、簡潔に記述することもできます。
※アロー関数の場合、thisを持たないので、thisを使用すると「window」オブジェクトを参照してしまいます。

main.onclick = () => {
  main.style.backgroundColor = "#3fb811";
};

サンプルコード

以下は、
クリックをした際に、CSSを変更するのではなく、クラスを変更してボタンの色を変更する
サンプルコードとなります。

※cssには「tailwind」を使用して、アロー関数で関数は定義してます。

<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="utf-8">
  <title>mebeeサンプル</title>
  <link href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" rel="stylesheet">
</head>

<script>

  window.onload = () => {

    add.onclick = () => {
      // クラスを全て編集
      document.getElementById('add').className = "bg-gradient-to-r from-green-400 via-blue-500 to-purple-500 text-white py-2 px-4 rounded-full mb-3 mt-4" ;
    };

  }

</script>

<body>
  <div class="container mx-auto my-56 w-64 px-4">

    <div id="sample" class="flex flex-col justify-center">

      <button id="add"
        class="bg-gradient-to-r from-purple-400 via-pink-500 to-red-500 text-white py-2 px-4 rounded-full mb-3 mt-4">
        変更
      </button>

    </div>

  </div>
</body>

</html>

クリックした際に色が変更されていることが確認できます。