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

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

複数ステップ進捗フォーム(別角度)

上部のドットと線で進捗を示し、次へ/戻るボタンでステップを移動します。Contact Form 7の長い申込フォームを段階的に見せたいときに使えます。

jsinput

プレビュー

ソースコード

HTML

<div class="d04-03-06-wrap">
          <div class="d04-03-06-dots">
            <span class="d04-03-06-dot is-active">1</span>
            <span class="d04-03-06-line"></span>
            <span class="d04-03-06-dot">2</span>
            <span class="d04-03-06-line"></span>
            <span class="d04-03-06-dot">3</span>
          </div>
          <p class="d04-03-06-step-txt">ステップ 1: 基本情報の入力</p>
          <div class="d04-03-06-nav">
            <button type="button" class="d04-03-06-prev" disabled>戻る</button>
            <button type="button" class="d04-03-06-next">次へ</button>
          </div>
        </div>

CSS

.d04-03-06-wrap{width:min(280px,100%);text-align:center}
        .d04-03-06-dots{display:flex;align-items:center;justify-content:center;gap:0;margin-bottom:16px}
        .d04-03-06-dot{
          width:26px;height:26px;border-radius:50%;background:#e4e8ef;color:#8a93a3;
          display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;
          transition:background .3s,color .3s;flex:0 0 auto;
        }
        .d04-03-06-dot.is-active{background:#4a6cf7;color:#fff}
        .d04-03-06-dot.is-done{background:#22b573;color:#fff}
        .d04-03-06-line{width:34px;height:3px;background:#e4e8ef;transition:background .3s}
        .d04-03-06-line.is-done{background:#22b573}
        .d04-03-06-step-txt{margin:0 0 16px;font-size:13px;color:#444}
        .d04-03-06-nav{display:flex;justify-content:center;gap:10px}
        .d04-03-06-nav button{
          padding:9px 16px;font-size:13px;font-weight:700;border-radius:8px;cursor:pointer;
          border:2px solid #d5d9e0;background:#fff;color:#444;transition:opacity .2s;
        }
        .d04-03-06-nav .d04-03-06-next{background:#4a6cf7;border-color:#4a6cf7;color:#fff}
        .d04-03-06-nav button:disabled{opacity:.4;cursor:not-allowed}

JavaScript

(function(){
        var wrap=document.querySelector('.d04-03-06-wrap');
        if(!wrap)return;
        var dots=Array.prototype.slice.call(wrap.querySelectorAll('.d04-03-06-dot'));
        var lines=Array.prototype.slice.call(wrap.querySelectorAll('.d04-03-06-line'));
        var txt=wrap.querySelector('.d04-03-06-step-txt');
        var prevBtn=wrap.querySelector('.d04-03-06-prev');
        var nextBtn=wrap.querySelector('.d04-03-06-next');
        var labels=['ステップ 1: 基本情報の入力','ステップ 2: ご連絡先の入力','ステップ 3: 内容の確認'];
        var cur=0;
        function paint(){
          dots.forEach(function(d,i){
            d.classList.toggle('is-active',i===cur);
            d.classList.toggle('is-done',i<cur);
          });
          lines.forEach(function(l,i){l.classList.toggle('is-done',i<cur);});
          txt.textContent=labels[cur];
          prevBtn.disabled=cur===0;
          nextBtn.textContent=cur===labels.length-1?'完了':'次へ';
        }
        prevBtn.addEventListener('click',function(){
          if(cur>0){cur--;paint();}
        });
        nextBtn.addEventListener('click',function(){
          if(cur<labels.length-1){cur++;paint();}
        });
      })();

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