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

パーツ番号 11-14-05 ・ JavaScript使用

オフライン時に操作不能になるボタン群

オフラインになると「いいね」「コメント」「シェア」ボタンがグレーアウトし操作できなくなる演出。WordPressの記事下アクション欄で、通信断時に誤操作を防ぎたい場合に活用できます。

js

プレビュー

ソースコード

HTML

<div class="d11-14-05-wrap">
          <div class="d11-14-05-frame">
            <div class="d11-14-05-actions" id="d1961Actions">
              <button type="button" class="d11-14-05-abtn">
                <svg viewBox="0 0 24 24" width="16" height="16"><path d="M12 20s-7-4.3-9.3-8.7C1.2 8 3 5 6.4 5c1.9 0 3.4 1 4.6 2.6C12.2 6 13.7 5 15.6 5 19 5 20.8 8 19.3 11.3 17 15.7 12 20 12 20z" fill="none" stroke="#374151" stroke-width="1.6"/></svg>
                いいね
              </button>
              <button type="button" class="d11-14-05-abtn">
                <svg viewBox="0 0 24 24" width="16" height="16"><path d="M4 4h16v11H8l-4 4V4z" fill="none" stroke="#374151" stroke-width="1.6" stroke-linejoin="round"/></svg>
                コメント
              </button>
              <button type="button" class="d11-14-05-abtn">
                <svg viewBox="0 0 24 24" width="16" height="16"><circle cx="6" cy="12" r="2.4" fill="none" stroke="#374151" stroke-width="1.6"/><circle cx="18" cy="6" r="2.4" fill="none" stroke="#374151" stroke-width="1.6"/><circle cx="18" cy="18" r="2.4" fill="none" stroke="#374151" stroke-width="1.6"/><line x1="8" y1="11" x2="16" y2="7" stroke="#374151" stroke-width="1.6"/><line x1="8" y1="13" x2="16" y2="17" stroke="#374151" stroke-width="1.6"/></svg>
                シェア
              </button>
            </div>
            <p class="d11-14-05-note" id="d1961Note">オフラインのため操作できません</p>
          </div>
          <button type="button" class="d11-14-05-toggle" id="d1961Toggle">オフラインを再現する</button>
        </div>

CSS

.prev.d11-14-05{align-items:flex-start;justify-content:flex-start}
        .d11-14-05-wrap{width:100%}
        .d11-14-05-frame{padding:16px 12px;border-radius:12px;background:#f8f9fb;border:1px solid #eef0f3;min-height:118px}
        .d11-14-05-actions{display:flex;gap:8px}
        .d11-14-05-abtn{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;padding:10px 6px;border-radius:10px;border:1px solid #eef0f3;background:#fff;color:#374151;font-size:10.5px;font-weight:700;cursor:pointer;transition:opacity .25s,filter .25s}
        .d11-14-05-abtn[disabled]{opacity:.4;filter:grayscale(1);cursor:not-allowed}
        .d11-14-05-note{display:none;text-align:center;font-size:10.5px;color:#dc2626;font-weight:700;margin:10px 0 0}
        .d11-14-05-note.show{display:block}
        .d11-14-05-toggle{margin-top:10px;width:100%;padding:9px;border-radius:8px;border:1px solid #d1d5db;background:#fff;color:#374151;font-size:12px;font-weight:700;cursor:pointer;transition:background .2s}
        .d11-14-05-toggle:hover{background:#f3f4f6}

JavaScript

(function(){
        var root=document.querySelector('.d11-14-05');
        var btns=root.querySelectorAll('.d11-14-05-abtn');
        var note=root.querySelector('#d1961Note');
        var toggle=root.querySelector('#d1961Toggle');
        var offline=false;
        toggle.addEventListener('click',function(){
          offline=!offline;
          btns.forEach(function(b){b.disabled=offline;});
          note.classList.toggle('show',offline);
          toggle.textContent=offline?'オンラインに戻す':'オフラインを再現する';
        });
      })();

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