コンテンツにスキップ

クリップボードにコピー

コピーされるために存在する読み取り専用の値 — 共有 URL、API トークン、 生成された SQL / 設定スニペット — に、手動の全選択 + Ctrl/Cmd-C を 強いるべきではありません(タッチでは特に劣悪です)。installCopy ビヘイビアは、素の <button> を「名前で指した要素の値をコピーし、 成功を伝え、連鎖可能なイベントを発火する」ように配線します — すべて 宣言的なマークアップからなので、厳格な Content-Security-Policy: default-src 'self'(インライン JS なし)の 下でも機能します。

このページのプレビューはすでにライブです — コピーは純粋にクライアント サイドで完結します(installCopy が指名された要素を読んで クリップボードへ書き込みます)。サーバ契約が存在しないため api/recipes/copy/ 名前空間もありません。他のレシピのライブデモは このサイトのデモ API と通信しますが、このレシピは以下のマークアップ 以外に何も必要としません。

data-hc-copy に、コピーする要素を CSS セレクタで指定します。 ビヘイビアは、フォームコントロールなら value (input / textarea / select)、それ以外の要素なら textContent をコピーします。

参照した要素の代わりに固定文字列をコピーするには data-hc-copy-text を 使います:

属性必須備考
data-hc-copyソースを 1 つコピーする要素の CSS セレクタ(value または textContent)。
data-hc-copy-textソースを 1 つコピーするリテラル文字列(data-hc-copy の代わりに使用)。
data-hc-copy-ok(任意)支援技術へ通知する成功テキスト。デフォルトは i18n カタログcopy.ok(“Copied”)。

コピーに成功すると、ビヘイビアは:

  • ボタンに約 1.5 秒間 data-hc-copied を設定します — この一時的な 合図は好きなようにスタイルできます(ボタン自身のアクセシブルな名前は 決して変わりません):

    .hc-button[data-hc-copied] { /* e.g. show a check, tint the button */ }
  • ビヘイビアが所有する視覚的に隠した role="status" ライブ領域を通じて 成功ラベルを読み上げさせます。

  • detail: { text } を持つバブリングする hc:copied イベントを発火 します。

hc:copied は普通のバブリングイベントです — コピー自体が トーストを開くことは決して ありません。インライン JS なしでコピー時にトーストを上げるには、 イベントを待ち受けて hc:toast を発火します:

document.addEventListener('hc:copied', () => {
document.body.dispatchEvent(new CustomEvent('hc:toast', {
bubbles: true,
detail: { message: 'Copied to clipboard', variant: 'success' },
}));
});

copy はキットで唯一の純粋にクライアントサイドなレシピです: installCopy() が名指しされた要素(または data-hc-copy-text の リテラル)を読んでクリップボードに書き込みます — リクエストは発生 しないため、実装すべきエンドポイントもレスポンスの形も api/recipes/copy/ 名前空間もありません。統合ポイントはページ上に だけあります: 上の属性と、連鎖のためのバブリングイベント hc:copied です。

  • トリガーは本物の <button> — キーボードで起動でき、タッチにも優しい (ホバーではなくクリック)。
  • 成功は role="status" 領域で読み上げられます。ボタンは一貫して自身の アクセシブルな名前を保ちます(「Copied」に付け替えられることは ありません)。

プログレッシブエンハンスメント

Section titled “プログレッシブエンハンスメント”

Clipboard API にはセキュアコンテキスト(https / localhost)が必要です。 使えない環境ではクリックは穏やかな no-op になり、フォームコントロールが ターゲットの場合はベストエフォートでテキストを選択して手動コピーできる ようにします。背後の値は、ビヘイビアなしでも常に見えて選択可能です。

  • トーストhc:copied と 組み合わせてコピーを確認。
  • i18n — 成功ラベル copy.ok の翻訳。