← 動的パーツギャラリーへ戻る

パーツ番号 08-11-11 ・ JavaScript使用

コトッと止まるトグルスイッチ

切り替えるとノブが少しオーバーシュートしてから小さく跳ね返り、機械式スイッチが噛み合うような感触を演出します。WordPressの設定画面のON/OFFスイッチに使えます。

js

プレビュー

ソースコード

HTML

<div class="d08-11-11-stage">
          <button class="d08-11-11-slider" type="button" role="switch" aria-checked="false" aria-label="通知音を切り替え">
            <span class="d08-11-11-track"><span class="d08-11-11-knob"></span></span>
          </button>
          <span class="d08-11-11-status">サイレントモード</span>
        </div>

CSS

.d08-11-11-stage{display:flex;flex-direction:column;align-items:center;gap:10px}
        .d08-11-11-slider{background:none;border:none;padding:0;cursor:pointer}
        .d08-11-11-track{display:block;width:56px;height:30px;border-radius:15px;background:#d8dae2;position:relative;transition:background .25s ease}
        .d08-11-11-knob{position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.25);transition:transform .3s cubic-bezier(.4,0,.2,1)}
        .d08-11-11-slider.is-on .d08-11-11-track{background:#6a5cff}
        .d08-11-11-slider.is-on .d08-11-11-knob{transform:translateX(26px)}
        .d08-11-11-knob.is-snap{animation:d08-11-11-snap .32s cubic-bezier(.3,1.7,.4,1)}
        @keyframes d08-11-11-snap{0%{transform:scale(1,1)}40%{transform:scale(1.25,.8)}70%{transform:scale(.92,1.1)}100%{transform:scale(1,1)}}
        .d08-11-11-status{font-size:11px;font-weight:700;color:#9aa0ad}

JavaScript

(function(){
        var slider=document.querySelector('#item-08-11-11 .d08-11-11-slider');
        var knob=document.querySelector('#item-08-11-11 .d08-11-11-knob');
        var status=document.querySelector('#item-08-11-11 .d08-11-11-status');
        if(!slider||!knob||!status)return;
        slider.addEventListener('click',function(){
          var on=slider.classList.toggle('is-on');
          slider.setAttribute('aria-checked',String(on));
          status.textContent=on?'サイレントモード:オン':'サイレントモード:オフ';
          knob.classList.remove('is-snap');void knob.offsetWidth;knob.classList.add('is-snap');
        });
      })();

クラス名 .d08-11-11 は本ライブラリ内での識別用です。複数のパーツを同じページで使う場合は、重複しないよう名前を変更してください。