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

パーツ番号 11-01-12 ・ JavaScript使用

コピー機能付きスニペットボックス

ボタンを押すとコード全文をクリップボードにコピーし、ボタンが一時的に「コピーしました」表示に変わります。WordPressのカスタマイズ解説記事のコード掲載に便利です。

clickjs

プレビュー

ソースコード

HTML

<div class="d11-01-12-box">
          <div class="d11-01-12-head">
            <span>functions.php</span>
            <button class="d11-01-12-copy" type="button">コピー</button>
          </div>
          <pre class="d11-01-12-code"><code>add_action('init', function() {
  // カスタム処理
});</code></pre>
        </div>

CSS

.d11-01-12-box{width:min(300px,100%);border-radius:10px;overflow:hidden;background:#1e2433;box-shadow:0 8px 20px rgba(0,0,0,.2)}
        .d11-01-12-head{display:flex;align-items:center;justify-content:space-between;padding:9px 14px;background:#151a26;font-size:11px;color:#9aa4bb}
        .d11-01-12-copy{
          padding:5px 12px;border:1px solid rgba(255,255,255,.2);border-radius:6px;
          background:transparent;color:#cbd3e6;font-size:10.5px;cursor:pointer;font-family:inherit;
          transition:background .2s,border-color .2s,color .2s;
        }
        .d11-01-12-copy:hover{border-color:#4a6cf7;color:#fff}
        .d11-01-12-copy.is-done{background:#22b573;border-color:#22b573;color:#fff}
        .d11-01-12-code{margin:0;padding:14px;font-size:11.5px;line-height:1.7;color:#c9d1e8;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow-x:auto}

JavaScript

(function(){
        var box = document.querySelector('.d11-01-12-box');
        if(!box)return;
        var btn = box.querySelector('.d11-01-12-copy');
        var code = box.querySelector('.d11-01-12-code');
        var original = btn.textContent;
        btn.addEventListener('click', function(){
          var text = code.textContent;
          function done(){
            btn.textContent = 'コピーしました';
            btn.classList.add('is-done');
            setTimeout(function(){ btn.textContent = original; btn.classList.remove('is-done'); }, 1800);
          }
          if(navigator.clipboard && navigator.clipboard.writeText){
            navigator.clipboard.writeText(text).then(done).catch(done);
          }else{
            var ta = document.createElement('textarea');
            ta.value = text;
            ta.style.position = 'fixed';
            ta.style.opacity = '0';
            document.body.appendChild(ta);
            ta.select();
            try{ document.execCommand('copy'); }catch(e){}
            document.body.removeChild(ta);
            done();
          }
        });
      })();

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