標籤:listen event 使用者 cli select 粘貼 default dev ast
最近,一些項目中用到監聽使用者複製。剪下的操作。
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();
js複製內容到剪下板,相容pc和手機端,支援Safari瀏覽器