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

パーツ番号 03-09-06 ・ JavaScript使用

ドリルダウン式メニュー

項目をクリックするとサブカテゴリへ横スライドで掘り下がり、戻るボタンで前の階層に戻ります。WordPressの多階層カテゴリをスマホでも見やすく整理できます。

mobileclickjs

プレビュー

ソースコード

HTML

<div class="d03-09-06-stage">
          <div class="d03-09-06-track">
            <div class="d03-09-06-panel">
              <p class="d03-09-06-title">メニュー</p>
              <button type="button" class="d03-09-06-item" data-go="1">レディース<span class="d03-09-06-chev"></span></button>
              <button type="button" class="d03-09-06-item" data-go="2">メンズ<span class="d03-09-06-chev"></span></button>
              <a href="#" onclick="return false" class="d03-09-06-item">セール</a>
            </div>
            <div class="d03-09-06-panel">
              <button type="button" class="d03-09-06-back" data-go="0"><span class="d03-09-06-chev back"></span>戻る</button>
              <p class="d03-09-06-title">レディース</p>
              <a href="#" onclick="return false" class="d03-09-06-item">トップス</a>
              <a href="#" onclick="return false" class="d03-09-06-item">ボトムス</a>
              <a href="#" onclick="return false" class="d03-09-06-item">アウター</a>
            </div>
            <div class="d03-09-06-panel">
              <button type="button" class="d03-09-06-back" data-go="0"><span class="d03-09-06-chev back"></span>戻る</button>
              <p class="d03-09-06-title">メンズ</p>
              <a href="#" onclick="return false" class="d03-09-06-item">トップス</a>
              <a href="#" onclick="return false" class="d03-09-06-item">アウター</a>
            </div>
          </div>
        </div>

CSS

.prev.d03-09-06{padding:0;display:block}
        .d03-09-06-stage{position:relative;width:100%;height:100%;min-height:260px;overflow:hidden;background:#fff}
        .d03-09-06-track{position:absolute;inset:0;display:flex;width:300%;transition:transform .35s cubic-bezier(.4,0,.2,1)}
        .d03-09-06-panel{width:33.3333%;flex:none;padding:16px;display:flex;flex-direction:column;gap:2px}
        .d03-09-06-title{margin:2px 0 8px;font-size:11px;font-weight:700;color:#94a3b8;text-transform:uppercase;letter-spacing:.06em}
        .d03-09-06-item{display:flex;align-items:center;justify-content:space-between;width:100%;border:none;background:transparent;text-align:left;text-decoration:none;font-family:inherit;font-size:13px;font-weight:600;color:#1f2937;padding:11px 6px;border-bottom:1px solid #f1f5f9;cursor:pointer}
        .d03-09-06-item:hover{color:#2563eb}
        .d03-09-06-chev{width:6px;height:6px;flex:none;border-right:2px solid #cbd5e1;border-bottom:2px solid #cbd5e1;transform:rotate(-45deg)}
        .d03-09-06-back{display:flex;align-items:center;gap:8px;border:none;background:transparent;font-family:inherit;font-size:12px;font-weight:600;color:#2563eb;padding:6px;margin-bottom:6px;cursor:pointer}
        .d03-09-06-chev.back{transform:rotate(135deg);border-color:#2563eb}

JavaScript

(function(){
        var stage=document.querySelector('.d03-09-06-stage');
        if(!stage)return;
        var track=stage.querySelector('.d03-09-06-track');
        function go(level){
          track.style.transform='translateX('+(-level*33.3333)+'%)';
        }
        stage.querySelectorAll('[data-go]').forEach(function(btn){
          btn.addEventListener('click',function(){
            go(parseInt(btn.getAttribute('data-go'),10));
          });
        });
      })();

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