js復制內容到剪切板,兼容pc和手機端,支持Safari瀏覽器


最近,一些項目中用到監聽用戶復制。剪切的操作。

Javascript原生有一些事件:copy、paste、cut,

這些事件可以作用的目標元素:

   能獲得焦點的元素 (如contentEditable內容能編輯或者可以選中的元素),或者是<body>

 1         <div id="cardList">
 2             <div class="btn">點擊我,復制我</div>
 3         </div>
 4         
 5         
 6         
 7         <script type="text/javascript">
 8             
 9             function copy(str){
10                 var save = function (e){
11                     e.clipboardData.setData('text/plain',str);//下面會說到clipboardData對象
12                     e.preventDefault();//阻止默認行為
13                 }
14                 document.addEventListener('copy',save);
15                 document.execCommand("copy");//使文檔處於可編輯狀態,否則無效
16             }
17                     
18             document.getElementById('cardList').addEventListener('click',function(ev){
19                  copy(ev.target.innerText)
20             })
21                 
22         </script>

 

使用jQuery中的方法監聽用戶的剪切、復制、粘貼的行為:

1 $("#cut").on("cut",function(){
2    alert("剪切");
3 });
4 $("#copy").on("copy",function(){
5    alert("復制");
6 });
7 $("#paste").on("paste",function(){
8    alert("粘貼");
9 });

這些行為包括使用鍵盤的ctrl + c操作,或者右擊鼠標—>復制等操作。

Evevt.clipboardData 對象

clipboardData是JavaScript剪切板對象,該對象提供了3個常用方法:

  clearData():  clipboardData對象從剪切板刪除一種或多種數據格式(一個參數:數據類型)

  getData():  clipboardData對象從剪切板獲取指定格式的數據(一個參數:數據類型)

  setData():  clipboardData對象賦予指定格式的數據(兩個參數:數據類型,要賦予的值)

  *數據類型一般為“"text/plain" ”

Evevt.clipboardData 對象兼容性問題

  經過嘗試,clipboardData對象內兼容大部分px瀏覽器,像chrome,firefox、ie等,但是在手機端兼容性不是很好,

  目前clipboardData在ios上的safari瀏覽器無效,為解決移動端這個問題,我們引用一個js插件——clipboard.js

  clipboard.js依賴於HTML5推出的Selection API和execCommand API

  使用:

  在頁面中引入

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

  使用clipboard.js的自定義屬性

 1      <!--使用data-clipboard-target屬性指定被復制的標簽-->
 2         <!--使用data-clipboard-action屬性指定一些操作,copy(復制),cut(剪切)-->
 3         <!--注意:cut 操作僅適用於<textarea>和<input>-->
 4         <div style="margin:2em">
 5             <textarea id="id_text"></textarea>
 6             <button type="button" id="id_copy"
 7                     data-clipboard-target="#id_text"
 8                     data-clipboard-action="copy">點擊復制
 9             </button>
10         </div>

  

1    var clipboard = new Clipboard("#id_copy");
2         clipboard.on("success",function (element) {//復制成功的回調
3             console.info("復制成功,復制內容:    " + element.text);
4         });
5         clipboard.on("error",function (element) {//復制失敗的回調
6             console.info(element);
7         })
8     });

  高級用法

1    //清理Clipboard對象
2     var clipboard = new Clipboard('.btn');
3     clipboard.destroy();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM