溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS怎么實現粘貼板功能

發布時間:2021-07-27 10:45:43 來源:億速云 閱讀:250 作者:小新 欄目:web開發

小編給大家分享一下JS怎么實現粘貼板功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

使用剪貼板是一項基本技能。作為碼農都應知道,Tab,Ctrl/Cmd + A,Ctrl / Cmd + C以及Ctrl / Cmd + V分別是自動聚焦、復制、粘貼的快捷鍵。

而對普通用戶可能就不太容易了。即使用戶知道剪貼板是什么,(除了)那些眼神極好或反應很快的人,其他情況下很難以突出顯示他們想要的確切文字。若用戶不知道鍵盤快捷鍵,也看不到隱藏的編輯菜單,或從未使用右鍵菜單或不知道長按觸屏彈出選項菜單,那么他很可能無法察覺到復制功能。

那么我們是否應該提供一個“復制到剪貼板”按鈕來幫助用戶?這功能應該會很有用,即使是對快捷鍵的人非常熟悉的用戶來說。

關于剪貼板的安全

幾年前,瀏覽器不可能直接使用剪貼板。開發人員不得不通過Flash來實現。

剪貼板看起來無關緊要,但想象一下,如果瀏覽器能夠隨意查看和操作內容,會發生什么。JS腳本(包括第三方腳本)能查看剪貼板內的文本信息,并將密碼,敏感信息甚至整個文檔發送到遠程服務器。

現在的剪貼板基本功能有限,有如下限制:

1.大多數瀏覽器支持剪貼板,除了Safari。(譯注,Safari其實已經支持)

2.支持因瀏覽器而異,有些功能不完整或有問題。

3.事件必須由用戶必須發起,如點擊鼠標或按下鍵盤。腳本不能自由訪問剪貼板。

document.execCommand()

此方法就是實現剪貼板的關鍵,它可以傳入cut,copy,paste三種參數。從最常用的document.execCommand('copy')開始介紹。

在使用之前,我們應該檢查瀏覽器是否支持copy命令:document.queryCommandSupported('copy');或document.queryCommandEnabled('copy');,這兩個方法效果相同。

但在Chrome下,盡管Chrome確實支持使用copy命名,但兩個方法都返回false。所以***是將檢查代碼包在一個try-catch代碼塊中。

下一步,我們應該允許用戶復制什么呢?必須突出顯示文本,所有瀏覽器都可用select()方法選擇文本input和textarea內的文本。同時Firefox和Chrome / Opera也支持document.createRange方法,該方法允許從任何元素中選擇文本,如下:

// select text in #myelement node var   myelement = document.getElementById('#myelement'),   range = document.createRange();  range.selectNode(myelement); window.getSelection().addRange(range);

但IE / Edge不支持。

clipboard.js

若你不想自己實現一個較為健壯的跨瀏覽器剪貼板方法的話,clipboard.js可以幫你。它有好幾種設置選項的方式,如H5的data屬性,設置綁定觸發元素以及目標元素,如:

<input id="copyme" value="text in this field will be copied" />  <button data-clipboard-target="#copyme">copy</button>

自己動手實現

clipboard.js大小僅2Kb,若僅實現如下的部分功能的話,那么可以在20行的代碼內實現:

1.僅部分表單元素可被復制

2.若在不支持的瀏覽器中(沒錯,就是指Safari)(譯注,Safari其實已經支持),可突出顯示選中文本,并提示用戶按Ctrl / Cmd + C。

像clipboard.js一樣,先創建一個button用于觸發方法,它具有一個data屬性data-copytarget,指向要copy的元素(即#website)

<input type="text" id="website" value="http://www.sitepoint.com/" />  <button data-copytarget="#website">copy</button>

一個立即執行函數表達式綁定click事件的函數,該函數用于解析data-copytarget屬性內容,選擇對應字段的文本并執行document.execCommand('copy')。若失敗,文本保持選中狀態,顯示提示框:

(function() {   'use strict';   // click events   document.body.addEventListener('click', copy, true);   // event handler   function copy(e) {     // find target element     var       t = e.target,       c = t.dataset.copytarget,       inp = (c ? document.querySelector(c) : null);     // is element selectable?     if (inp && inp.select) {       // select text       inp.select();       try {         // copy text         document.execCommand('copy');         inp.blur();       }       catch (err) {         alert('please press Ctrl/Cmd+C to copy');       }     }   }  })();

示例

雖然在上例中,算上樣式和動畫的代碼,代碼已經超過20行了,但動畫和樣式是可選的。

總結:

1.通過.select()選擇要復制的表單元素的內容

2.調用document.execCommand("copy")方法

3.調用.blur()方法,從表單元素中移除焦點

4.將第2、3步包在try catch塊中,在不支持的瀏覽器下則提示

以上是“JS怎么實現粘貼板功能”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女