clipboard.js

zenorochaMIT更新放缓

轻量级 JavaScript 库,用 3KB 压缩体积实现现代浏览器的一键复制到剪贴板,彻底摆脱 Flash 依赖。

:scissors: Modern copy to clipboard. No Flash. Just 3kb gzipped :clipboard:

v2.0.11发布于 2022-05-04 17:59 UTC34,081star3,894fork同步于 2026-11-10 23:23 UTC

怎么上手

由 README 提炼,执行前请确认
npm install clipboard --save
<script src="dist/clipboard.min.js"></script>
new ClipboardJS('.btn');
硬件要求按 README 说明

README 未说明;这是浏览器端 JS 库,无 GPU 或显存要求,依赖浏览器 Selection 与 execCommand API

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

轻量级浏览器剪贴板库,无需 Flash,压缩后仅 3kb,用 data 属性即可实现复制与剪切

轻量级 JavaScript 库,用 3KB 压缩体积实现现代浏览器的一键复制到剪贴板,彻底摆脱 Flash 依赖。

核心能力

  • 用 data-clipboard-target 复制指定元素内容
  • 用 data-clipboard-action 切换 copy 或 cut
  • 用 data-clipboard-text 直接复制属性文本
  • 通过事件委托只挂一个监听器,节省内存
  • 提供 success 与 error 事件回调做用户反馈

容易踩的坑

cut 动作只对 input 或 textarea 元素生效;库本身不含任何 CSS 或 tooltip,需自行实现提示样式;在 Bootstrap Modal 等会改变焦点的场景需显式传入 container 选项

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v2.0.11
  1. v2.0.11Fixes & DX Enhancements最新正式版2022-05-04 · 2022-05-04 17:59 UTC
    • Fix type for copy function #795
    • Remove blurring behavior after copy action invoke #807
    • Support more HTML input types #808
  2. v2.0.10Fixes and Docs Updates2022-02-02 · 2022-02-02 15:28 UTC
    查看更新说明
    • Fix Event API issue returning a function instead of a string in the Event.Action property
    • Update docs to make it easier to track Event API
    • Update tests to cover Event.Action property
  3. v2.0.92022-01-28 · 2022-01-28 02:03 UTC
    查看更新说明
    • Add new API methos .cut and .copy
    • Improve code internals
  4. v2.0.82021-03-10 · 2021-03-10 20:51 UTC
    查看更新说明
  5. v2.0.7V2.0.72021-03-06 · 2021-03-06 13:27 UTC
    查看更新说明

    Fix Textarea not being removed from DOM

    Related issue https://github.com/zenorocha/clipboard.js/issues/732

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    clipboard.js

    Build Status Killing Flash

    Modern copy to clipboard. No Flash. Just 3kb gzipped.

    Why

    Copying text to the clipboard shouldn't be hard. It shouldn't require dozens of steps to configure or hundreds of KBs to load. But most of all, it shouldn't depend on Flash or any bloated framework.

    That's why clipboard.js exists.

    Install

    You can get it on npm.

    npm install clipboard --save
    

    Or if you're not into package management, just download a ZIP file.

    Setup

    First, include the script located on the dist folder or load it from a third-party CDN provider.

    <script src="dist/clipboard.min.js"></script>
    

    Now, you need to instantiate it by passing a DOM selector, HTML element, or list of HTML elements.

    new ClipboardJS('.btn');
    

    Internally, we need to fetch all elements that matches with your selector and attach event listeners for each one. But guess what? If you have hundreds of matches, this operation can consume a lot of memory.

    For this reason we use event delegation which replaces multiple event listeners with just a single listener. After all, #perfmatters.

    Usage

    We're living a declarative renaissance, that's why we decided to take advantage of HTML5 data attributes for better usability.

    Copy text from another element

    A pretty common use case is to copy content from another element. You can do that by adding a data-clipboard-target attribute in your trigger element.

    The value you include on this attribute needs to match another's element selector.

    <!-- Target -->
    <input id="foo" value="https://github.com/zenorocha/clipboard.js.git" />
    
    <!-- Trigger -->
    <button class="btn" data-clipboard-target="#foo">
      <img src="https://raw.githubusercontent.com/zenorocha/clipboard.js/HEAD/assets/clippy.svg" alt="Copy to clipboard" />
    </button>
    

    Cut text from another element

    Additionally, you can define a data-clipboard-action attribute to specify if you want to either copy or cut content.

    If you omit this attribute, copy will be used by default.

    <!-- Target -->
    <textarea id="bar">Mussum ipsum cacilds...</textarea>
    
    <!-- Trigger -->
    <button class="btn" data-clipboard-action="cut" data-clipboard-target="#bar">
      Cut to clipboard
    </button>
    

    As you may expect, the cut action only works on <input> or <textarea> elements.

    Copy text from attribute

    Truth is, you don't even need another element to copy its content from. You can just include a data-clipboard-text attribute in your trigger element.

    <!-- Trigger -->
    <button
      class="btn"
      data-clipboard-text="Just because you can doesn't mean you should — clipboard.js"
    >
      Copy to clipboard
    </button>
    

    Events

    There are cases where you'd like to show some user feedback or capture what has been selected after a copy/cut operation.

    That's why we fire custom events such as success and error for you to listen and implement your custom logic.

    var clipboard = new ClipboardJS('.btn');
    
    clipboard.on('success', function (e) {
      console.info('Action:', e.action);
      console.info('Text:', e.text);
      console.info('Trigger:', e.trigger);
    
      e.clearSelection();
    });
    
    clipboard.on('error', function (e) {
      console.error('Action:', e.action);
      console.error('Trigger:', e.trigger);
    });
    

    For a live demonstration, go to this site and open your console.

    Tooltips

    Each application has different design needs, that's why clipboard.js does not include any CSS or built-in tooltip solution.

    The tooltips you see on the demo site were built using GitHub's Primer. You may want to check that out if you're looking for a similar look and feel.

    Advanced Options

    If you don't want to modify your HTML, there's a pretty handy imperative API for you to use. All you need to do is declare a function, do your thing, and return a value.

    For instance, if you want to dynamically set a target, you'll need to return a Node.

    new ClipboardJS('.btn', {
      target: function (trigger) {
        return trigger.nextElementSibling;
      },
    });
    

    If you want to dynamically set a text, you'll return a String.

    new ClipboardJS('.btn', {
      text: function (trigger) {
        return trigger.getAttribute('aria-label');
      },
    });
    

    For use in Bootstrap Modals or with any other library that changes the focus you'll want to set the focused element as the container value.

    new ClipboardJS('.btn', {
      container: document.getElementById('modal'),
    });
    

    Also, if you are working with single page apps, you may want to manage the lifecycle of the DOM more precisely. Here's how you clean up the events and objects that we create.

    var clipboard = new ClipboardJS('.btn');
    clipboard.destroy();
    

    Browser Support

    This library relies on both Selection and execCommand APIs. The first one is supported by all browsers while the second one is supported in the following browsers.

    42+ ✔12+ ✔41+ ✔9+ ✔29+ ✔10+ ✔

    The good news is that clipboard.js gracefully degrades if you need to support older browsers. All you have to do is show a tooltip saying Copied! when success event is called and Press Ctrl+C to copy when error event is called because the text is already selected.

    You can also check if clipboard.js is supported or not by running ClipboardJS.isSupported(), that way you can hide copy/cut buttons from the UI.

    Bonus

    A browser extension that adds a "copy to clipboard" button to every code block on GitHub, MDN, Gist, StackOverflow, StackExchange, npm, and even Medium.

    Install for Chrome and Firefox.

    License

    MIT License © Zeno Rocha