0%

Programmingプログラミングナレッジ

Posted:2018.08.07

javascriptでテキストのクリックでクリップボードにコピーする

今回は指定されたテキストをクリップボードにコピーする方法をまとめていきたいと思います。テキストをカーソルで選択してコピーするのも一つの方法ですが、ボタンのクリックで完結する方がやはり便利ですよね。

 

クリップボードにコピーするのに「clipboard.js」というライブラリを使う方法もありますが、最小限の要件であればライブラリを使わなくても実装できますので、その形でコードを記述しています。

(参考)
【clipboard.js】
https://clipboardjs.com/

 

ではコードの方を見ていきます。こちらでは最小限でシンプルな形にしていますので、デザインなどは適宜合わせてください。

【HTML】※一部省略

<input type="text" id="input_copy" value="https://designsupply-web.com/" readonly>
<button id="btn_copy">テキストをコピーする</button>

 

【javascript】

function txtCopy() {
  const target = document.getElementById('input_copy');
  if (navigator.userAgent.match(/ipad|ipod|iphone/i)) {
    target.readOnly = false;
    const range = document.createRange();
    range.selectNode(target);
    window.getSelection().addRange(range);
    document.execCommand('copy');
    target.readOnly = true;
  } else {
    target.select();
    document.execCommand('copy');
  }
  alert("text copied!!");
}
const trg = document.getElementById('btn_copy');
trg.addEventListener('click',txtCopy);

 

まずはHTMLから、input要素とbutton要素を設置します。value値をあらかじめ入れておきますが、input要素にはreadonly属性を与えることで入力値を固定できます。

 

次にjavascriptでクリップボードにコピーする実装をしていきます。最初にクリップボードにコピーする関数を作成します。ただし、現在iOSではクリップボードの仕様が異なるので実装方法が異なります。ユーザーエージェントで分岐させておきます。

 

クリップボードにコピーさせるためには、input要素の値を選択する必要がありますので、select()で値を選択状態にさせます。そして、document.execCommand(‘copy’)で選択した値をクリップボードにコピーさせます。この関数をボタンをクリックした時に実行させるようにします。

 

またiOSの場合ではinput要素がreadonlyになっているとクリップボードにコピーできないようです。コピーする前に一度readonlyを解除し、コピー後にreadonlyへ戻すという作業が必要になります。

 

実際にサンプルを作成していますので、動作などはこちらで確認できます。サンプルではコピーされたことを通知するためにアラートが表示されるようにしています。

 

See the Pen textcopy_on_clipboard by designsupply (@designsupply) on CodePen.

 

ちなみにですが、デザインの都合上、input要素などを見せたくない場合にCSS側で「display: none;」や「visibility: hidden;」「width: 0; height: 0;」などで非表示にしてしまうとコピーできないので注意が必要です。このような場合には「width: 1px; height: 1px; opacity: 0;」というような形で対応するのがいいかと思います。

 

あまり使うような場面は多くないですが、Webサービスなどでもよく見かける機能ですので、活用してみるのもいいのではないでしょうか。

author
この記事を書いた人オガワ シンヤ
FacebookTwitter

DesignSupply.代表 / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はチョコレートが欠かせない三十路Webクリエイター。

制作のご依頼やお問い合わせ・パートナー業務提携のご相談はこちら

デザインやウェブ制作についてのご依頼やご相談、その他お問い合わせなどもお気軽にご連絡ください。フットワークの軽さやレスポンスの早さ、また豊富な経験や知識、技術を活かした対応力といったフリーランスクリエイターの強みでクライアント様、パートナー企業様のお力になります。デザインからコーディングやWordPress実装といったウェブサイト構築はもちろん、写真撮影や動画編集、コンテンツ制作からサイト運用サポートまで一括してお任せください。

ホームページ制作のご検討やウェブ運用でお悩みの経営者様や企業のウェブ担当者様をはじめ、個人で店舗を営んでいらっしゃるオーナー様、フリーで活動されているビジネスオーナー様はもちろんのこと、リソース不足でお困りの制作会社様、またクリエイターをお探しの代理店様も大歓迎です。

コンタクトをご希望の方はお手数ですが、下記よりお問い合わせフォームのページへアクセスしていただき、必要事項を入力の上メッセージを送信してください。確認でき次第すぐに折り返しご連絡致します。

こんな記事も読まれています

コメントもお気軽にどうぞ

記事に関するご質問やご意見などありましたら下記のコメントフォームよりお気軽に投稿ください。なおメールアドレスは公開されませんのでご安心ください。また、* が付いている欄は必須項目となります。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。

CAPTCHA


ページトップへ
大阪市天王寺区のホームページ制作デザイン事務所(SOHO)DesignSupply.【デザインサプライ】