課題【練習問題(DOM操作/イベント操作)】ーNo.007

課題内容

  • <概要>
  •  ボタンを3つ用意しましょう。
  •  ボタンはそれぞれ、順番として、
  •  1つ目
  •  2つ目
  •  3つ目
  •  がわかるようにボタンを準備します。
  •  初期表示は1つ目だけ、色が変わった状態にします。
  •  動きは、3つの中で、色が変わるのは1つだけで、
  •  押されたボタン:背景色を赤色、文字を白色に変更
  •  押されたボタン以外:初期の背景色は白色、文字は黒色に変更
  •  という動きをつけましょう。
  •  
  •  実際の表示は、以降の出力結果などを、
  •  参考にして作ってみましょう。
  •  

出力結果

初期表示として、

このような表示になるように、

HTMLで表示を作りましょう。

ボタンを押したときの表示は、

以下のようになります。

ボタンを押した時の背景色の変更

例えば、

初期の表示の状態で、「2つ目」のボタンを押したときは、

このように、

「2つ目」のボタンの背景色が赤色に変更します。

このとき、

最初の「1つ目」のボタンの背景色は白色に変更しています。

同じように、

「3つ目」のボタンを押したときは、

「3つ目」のボタンの背景色が赤色になり、

他の「1つ目」「2つ目」のボタンについては、

背景色が白色に変更されます。

このように、

どれか1つのボタンだけが、

背景色が赤色になるようにしてみましょう。

実際の動きを確認(サンプルの動き)

サンプルの動きとして、

以下を参考にしてください。

ポイント(色をつけるためには?)

色をつけたり、消したりするには、

どうしたら良いかという点は、

「クリックした」というイベントのときに、

DOM操作として、

  • 要素にクラスを追加する
  • 要素からクラスを削除する

ということを行うことで、

divタグに対して、

色をつけたり、消したりすることができます。

具体的には、

  • マウスカーソルが当たる → 色を付けるクラスを追加
  • マウスカーソルが外れる → 色を付けるクラスを削除

という処理を行うことで、

今回の課題の動きを実現することができます。

この要素に対して、

クラスを追加、削除する方法に関しては、

以下を参考にしてください。

答え

HTML

<html>
  <head>
    <meta charset="UTF-8">
    <title>Sample Dom/Event</title>
    <link rel="stylesheet" type="text/css" href="stylesheet.css">
  </head>
  <body>
    <div class="text-pattern">
      <label>3つのボタンをクリック</label>
    </div>
    <div>
      <button id="btn-first" class="btn-pattern btn-color-active">1つ目</button>
      <button id="btn-second" class="btn-pattern btn-color-default">2つ目</button>
      <button id="btn-third" class="btn-pattern btn-color-default">3つ目</button>
    </div>
  </body>
  <script type="text/javascript" src="sample.js"></script>
</html>

CSS

.btn-pattern {
  display: inline-block;
  outline: none;
  cursor: pointer;
  font-size: 16px;
  line-height: 20px;
  font-weight: 600;
  border-radius: 8px;
  padding: 14px 24px;
  border: 1px solid #222222;
  box-shadow 0.2s ease 0s;
  transform 0.1s ease 0s;
}

.btn-color-default:hover {
  border-color: #000000;
  background: #f7f7f7;
}

.btn-color-active {
  background: #E31C5F;
  color: #fff;
}

.btn-color-default {
  background: #fff;
  color: #222222;
}

javaScript

// 1つ目のボタンの定義
let btnFirst = document.querySelector('#btn-first');

// 2つ目のボタンの定義
let btnSecond = document.querySelector('#btn-second');

// 3つ目のボタンの定義
let btnThird = document.querySelector('#btn-third');


// マウスカーソルが外れた(1つ目)
btnFirst.addEventListener('click',event => {

  // 1つ目のボタンのクラス設定
  btnFirst.classList.remove('btn-color-default');
  btnFirst.classList.add('btn-color-active');

  // 2つ目のボタンのクラス設定
  btnSecond.classList.add('btn-color-default');
  btnSecond.classList.remove('btn-color-active');

  // 3つ目のボタンのクラス設定
  btnThird.classList.add('btn-color-default');
  btnThird.classList.remove('btn-color-active');
})


// マウスカーソルが外れた(2つ目)
btnSecond.addEventListener('click',event => {

  // 1つ目のボタンのクラス設定
  btnFirst.classList.add('btn-color-default');
  btnFirst.classList.remove('btn-color-active');

  // 2つ目のボタンのクラス設定
  btnSecond.classList.remove('btn-color-default');
  btnSecond.classList.add('btn-color-active');

  // 3つ目のボタンのクラス設定
  btnThird.classList.add('btn-color-default');
  btnThird.classList.remove('btn-color-active');
})


// マウスカーソルが外れた(3つ目)
btnThird.addEventListener('click',event => {

  // 1つ目のボタンのクラス設定
  btnFirst.classList.add('btn-color-default');
  btnFirst.classList.remove('btn-color-active');

  // 2つ目のボタンのクラス設定
  btnSecond.classList.add('btn-color-default');
  btnSecond.classList.remove('btn-color-active');

  // 3つ目のボタンのクラス設定
  btnThird.classList.remove('btn-color-default');
  btnThird.classList.add('btn-color-active');
})