Toggleでの開閉をjQueryで表現

2024.07.02 09:00
2024.07.02 11:37
Toggleでの開閉をjQueryで表現

WEBサイトでよく見るトグルを作ってみたいと思います。
手軽さ・取り回しを考えてあえてjQueryで作ります。

まずは完成形。

実際に作っていってみます。
まずはHTML。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" media="all" href="toggle.css" />
  <title></title>  
</head>
<body>

  <div class="container">
    <div class="box" id="Box">
      <div class="toggleInner">
        <label class="toggle" for="Box">
          <input type="checkbox" name="checkbox" class="toggleInput" id="Box">
          <div class="toggleBtn"></div>
        </label>

        <div class="toggleClick">
          クリックするところ
        </div>

        <div class="toggleOpen">
          <p>
            テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。
          </p>
        </div>
      </div>
    </div>
  </div>

<script
  src="https://code.jquery.com/jquery-3.7.1.min.js"
  integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
  crossorigin="anonymous"></script>
  <script src="toggle.js"></script>
</body>
</html>

checkboxにチェックが入っているかどうかで開閉判断をします。

次にCSS。

.container {
  max-width: 680px;
  margin: 0 auto;
}
.toggleInner {
  background-color: #eee;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  padding: 40px;
  position: relative;
  width: 100%;
  height: 100%;
}
.toggle {
  pointer-events: none;
  position: absolute;
  top: -20px;
  left: 0px;
}

.toggleBtn:before {
  display: inline-block;
  text-align: center;
  content: "+";
  width: 35px;
  height: 35px;
}
.toggleInput {
  visibility: hidden;
}
.toggleInput[type="checkbox"]:checked ~ .toggleBtn:before {
  display: inline-block;
  text-align: center;
  content: "-";
  width: 35px;
  height: 35px;    
}
.toggleOpen {
  display: none;
}
.toggleClick {
  cursor: pointer;
}

チェックボックス自体はvisibilityで非表示にし、contentで「+」「-」を表示します。
.toggleInput[type=”checkbox”]:checked ~ .toggleBtn:beforeで、checkがはいっていたら、「toggleBtn:before」を反映させます。

最後にJavascript。

$(document).ready(function () {
  $(".toggleClick").on('click', function(){
      $(this).next().toggle('fast');
      //チェックボックスの現在のステータスを取得
      let chk = $(this).siblings(".toggle").children(".toggleInput");
      if(chk.prop("checked")) {
          chk.prop('checked', false)
      } else {
          chk.prop('checked', true)
      }
  });
});

toggleClickをクリックしたらチェックボックスのオンオフを切り替えます。
これで完成です!

今回は以上です!