使用clipboard.js庫實現復制剪切功能
項目地址:https://github.com/zenorocha/clipboard.js
現代化的“復制到剪切板”插件。不包含 Flash。gzip 壓縮後僅 3kb。
為什麼使用它
復制文字到剪切板不應該很難去實現。它不需要配置幾十個步驟或者加載幾百 KB 的文件。最重要的是,它不應該依賴 Flash 或其他臃腫的框架。
這是 clipboard.js 誕生的原因。
安裝
你可以通過 npm 來安裝它。
npm install clipboard --save
如果你不使用包管理,僅需要下載一個ZIP文件。
開始
首先,引入位於dist
目錄下的腳本文件,或者引入一個第三方CDN。
<script src="dist/clipboard.min.js"></script>
然後,你需要通過傳入一個DOM 選擇器,HTML 元素, 或者HTML 元素數組作為參數,來實例化對象。
new Clipboard('.btn');
本質上,我們需要獲取所有選擇器匹配到的元素,並為每一個選擇器設置監聽事件。但仔細想想,如果有成百上千個匹配到的元素,這樣做會耗費大量內存。
因此,我們使用事件代理,通過一個事件監聽器來取代多個事件監聽。畢竟,性能是問題。
使用
我們正在經歷一場聲明式的復興,這就是為什麼我們決定利用HTML5data
屬性來提高可用性的原因。
從另一個元素復制文本
一個很常見的用例是從另一個元素復制內容。你可以給目標元素添加一個data-clipboard-target
屬性來實現這個功能。
這個屬性的值就是能匹配到另一個元素的選擇器。
<!-- Target --> <input id="foo" value="https://github.com/zenorocha/clipboard.js.git"> <!-- Trigger --> <button class="btn" data-clipboard-target="#foo"> <img src="assets/clippy.svg" alt="Copy to clipboard"> </button>
從另一個元素剪切文本
此外,你可以定義一個data-clipboard-action
屬性來指明你想要復制(copy
)還是剪切(cut
)內容。
如果你省略這個屬性,則默認為復制(copy
)。
<!-- Target --> <textarea id="bar">Mussum ipsum cacilds...</textarea> <!-- Trigger --> <button class="btn" data-clipboard-action="cut" data-clipboard-target="#bar"> Cut to clipboard </button>
正如你所預料的,剪切(cut
)動作隻在<input>
或<textarea>
元素起作用。
從屬性復制文本
事實上,你甚至不需要從另一個元素來復制內容。你僅需要給目標元素設置一個data-clipboard-text
屬性就可以瞭。
<!-- Trigger --> <button class="btn" data-clipboard-text="Just because you can doesn't mean you should — clipboard.js"> Copy to clipboard </button>
事件
如果你想要展示一些用戶反饋,或者在用戶復制/剪切後獲取已經選擇的文字,這裡有個示例供你參考。
我們通過觸發自定義事件,例如success
和error
,讓你可以設置監聽並實現自定義邏輯。
var clipboard = new Clipboard('.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); });
你可以訪問這個網站,打開控制臺,查看演示示例。
工具提示(Tooltips)
每個應用有著不同的設計需求,這是為什麼 clipboard.js 沒有包含任何 CSS 或內置的工具提示解決方案。
你在示例網站看到的工具提示是通過GitHub's Primer構建的。如果你正在尋找一個外觀和體驗類似的庫,你可以去看看這個項目。
高級選項
如果你不想修改 HTML,我們提供瞭一個非常方面的命令式的 API 給你使用。你需要做的就是聲明一個函數,做一些處理,並返回一個值。
例如,如果你希望動態設置target
,你需要返回一個節點(Node).
new Clipboard('.btn', { target: function(trigger) { return trigger.nextElementSibling; } });
如果你希望動態設置text
,你需要返回一個字符串。
new Clipboard('.btn', { text: function(trigger) { return trigger.getAttribute('aria-label'); } });
如果在 Bootstrap 模態框(Modals)中使用,或是在其他修改焦點的類庫中使用,你會希望將獲得焦點的元素設置為container
屬性的值。
new Clipboard('.btn', { container: document.getElementById('modal') });
同樣地,如果你使用單頁應用,你可能想要更加精確地管理 DOM 的生命周期。你可以清理事件以及創建的對象。
var clipboard = new Clipboard('.btn'); clipboard.destroy();
瀏覽器支持
這個庫依賴於Selection和execCommand的 API。前者兼容所有的瀏覽器,後者兼容以下瀏覽器。
好消息是,如果你需要支持舊瀏覽器,clipboard.js 可以優雅降級。你所要做的就是在success
事件觸發時提示用戶“已復制!”,error
事件觸發時提示用戶“按 Ctrl+C 復制文字”(此時用戶要復制的文字已經選擇瞭)。
你也可以通過運行Clipboard.isSupported()
來檢查瀏覽器是否支持 clipboard.js,如果不支持,你可以隱藏復制/剪切按鈕。
到此這篇關於clipboard.js實現復制剪切功能的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- clipboard.js使用總結
- 代碼塊高亮可復制顯示js插件highlight.js+clipboard.js整合
- JS如何使用剪貼板操作Clipboard API
- Vue中使用highlight.js實現代碼高亮顯示以及點擊復制
- 如何利用python在剪貼板上讀取/寫入數據