最近,一些項目中用到監聽用戶復制。剪切的操作。
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();