Javascript原生有一些事件:copy、paste、cut,javascript
這些事件能夠做用的目標元素:css
能得到焦點的元素 (如contentEditable
內容能編輯或者能夠選中的元素),或者是<body>
html
<div id="cardList"> <div class="btn">點擊我,複製我</div> </div> <script type="text/javascript"> function copy(str){ var save = function (e){ e.clipboardData.setData('text/plain',str);//下面會說到clipboardData對象 e.preventDefault();//阻止默認行爲 } document.addEventListener('copy',save); document.execCommand("copy");//使文檔處於可編輯狀態,不然無效 } document.getElementById('cardList').addEventListener('click',function(ev){ copy(ev.target.innerText) }) </script>
使用jQuery中的方法監聽用戶的剪切、複製、粘貼的行爲:java
$("#cut").on("cut",function(){ alert("剪切"); }); $("#copy").on("copy",function(){ alert("複製"); }); $("#paste").on("paste",function(){ alert("粘貼"); });
這些行爲包括使用鍵盤的ctrl + c操做,或者右擊鼠標—>複製等操做。jquery
Evevt.clipboardData 對象ios
clipboardData是JavaScript剪切板對象,該對象提供了3個經常使用方法:git
clearData(): clipboardData對象從剪切板刪除一種或多種數據格式(一個參數:數據類型)github
getData(): clipboardData對象從剪切板獲取指定格式的數據(一個參數:數據類型)chrome
setData(): clipboardData對象賦予指定格式的數據(兩個參數:數據類型,要賦予的值)瀏覽器
*數據類型通常爲「"text/plain
" 」
Evevt.clipboardData 對象兼容性問題
通過嘗試,clipboardData對象內兼容大部分px瀏覽器,像chrome,firefox、ie等,可是在手機端兼容性不是很好,
目前clipboardData在ios上的safari瀏覽器無效,爲解決移動端這個問題,咱們引用一個js插件——clipboard.js
clipboard.js依賴於HTML5推出的Selection API和execCommand API
使用方法:
首先在頁面中引入
<script src="clipboard.min.js"></script>
使用clipboard.js的自定義屬性
<!--使用data-clipboard-target屬性指定被複制的標籤--> <!--使用data-clipboard-action屬性指定一些操做,copy(複製),cut(剪切)--> <!--注意:cut 操做僅適用於<textarea>和<input>--> <div style="margin:2em"> <textarea id="id_text"></textarea> <button type="button" id="id_copy" data-clipboard-target="#id_text" data-clipboard-action="copy">點擊複製 </button> </div> <script type="text/javascript"> var clipboard = new Clipboard("#id_copy"); clipboard.on("success",function (element) {//複製成功的回調 console.info("複製成功,複製內容: " + element.text); }); clipboard.on("error",function (element) {//複製失敗的回調 console.info(element); }); </script>
高級用法:
//清理Clipboard對象 var clipboard = new Clipboard('.btn'); clipboard.destroy();
JS實現各類複製到剪貼板:
一、實現點擊按鈕,複製文本框中的的內容
<script type="text/javascript"> function copyyel2() { var yel2=document.getElementById("biao1"); yel2.select(); // 選擇對象 document.execCommand("Copy"); // 執行瀏覽器複製命令 alert("已複製好,可貼粘。"); } </script> <textarea cols="20" rows="10" id="biao1">用戶定義的代碼區域</textarea> <input type="button" onClick="copyyel2()" value="點擊複製代碼" />
二、複製專題地址和 url 地址,傳給 QQ/MSN 上的好友
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>Js複製代碼</title> </head> <body> <p> <input type="button" name="anniu1" onClick='copyToClipBoard()' value="複製專題地址和url地址,傳給QQ/MSN上的好友"> <script language="javascript"> function copyToClipBoard(){ var clipBoardContent=""; clipBoardContent+=document.title; clipBoardContent+=""; clipBoardContent+=this.location.href; window.clipboardData.setData("Text",clipBoardContent); alert("複製成功,請粘貼到你的QQ/MSN上推薦給你的好友"); } </script>
三、直接複製 url
<input type="button" name="anniu2" onClick='copyUrl()' value="複製URL地址"> <script language="javascript"> function copyUrl() { var clipBoardContent=this.location.href; window.clipboardData.setData("Text",clipBoardContent); alert("複製成功!"); } </script>
四、點擊文本框時,複製文本框裏面的內容
<input onclick="oCopy(this)" value="你好.要copy的內容!"> <script language="javascript"> function oCopy(obj){ obj.select(); js=obj.createTextRange(); js.execCommand("Copy") alert("複製成功!"); } </script>
五、複製文本框或者隱藏域中的內容
<script language="javascript"> function CopyUrl(target){ target.value=myimg.value; target.select(); js=myimg.createTextRange(); js.execCommand("Copy"); alert("複製成功!"); } function AddImg(target){ target.value="[IMG]"+myimg.value+"[/ img]"; target.select(); js=target.createTextRange(); js.execCommand("Copy"); alert("複製成功!"); } </script>
6.複製 span 標記中的內容
<script type="text/javascript"> </script> <br /> <br /> <script type="text/javascript">function copyText(obj) { var rng = document.body.createTextRange(); rng.moveToElementText(obj); rng.scrollIntoView(); rng.select(); rng.execCommand("Copy"); rng.collapse(false); alert("複製成功!"); } </script>
7.瀏覽器兼容 copyToClipboard("拷貝內容")
function copyToClipboard(txt) { if (window.clipboardData) { window.clipboardData.clearData(); clipboardData.setData("Text", txt); alert("複製成功!"); } else if (navigator.userAgent.indexOf("Opera") != -1) { window.location = txt; } else if (window.netscape) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert("被瀏覽器拒絕!\n請在瀏覽器地址欄輸入'about:config'並回車\n而後將 'signed.applets.codebase_principal_support'設置爲'true'"); } var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard); if (!clip) return; var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable); if (!trans) return; trans.addDataFlavor("text/unicode"); var str = new Object(); var len = new Object(); var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); var copytext = txt; str.data = copytext; trans.setTransferData("text/unicode", str, copytext.length * 2); var clipid = Components.interfaces.nsIClipboard; if (!clip) return false; clip.setData(trans, null, clipid.kGlobalClipboard); alert("複製成功!"); } }
8.兼容各大瀏覽器的複製代碼(結合ZeroClipboard.js)
<html> <head> <title>Zero Clipboard Test</title> <script type="text/javascript" src="ZeroClipboard.js"></script> <script language="JavaScript"> var clip = null; function $(id) { return document.getElementById(id); } function init() { clip = new ZeroClipboard.Client(); clip.setHandCursor(true); clip.addEventListener('mouseOver', function (client) { // update the text on mouse over clip.setText( $('fe_text').value ); }); clip.addEventListener('complete', function (client, text) { //debugstr("Copied text to clipboard: " + text ); alert("該地址已經複製,你可使用Ctrl+V 粘貼。"); }); clip.glue('clip_button', 'clip_container' ); } </script> </head> <body onLoad="init()"> <input id="fe_text" cols=50 rows=5 value=複製內容文本1 > <span id="clip_container"><span id="clip_button"><b>複製</b></span></span> </body> </html>
jQuery ZeroClipboard是在ZeroClipboard的基礎上進行的改良,簡稱zClip,做爲jQuery的API,jQuery ZeroClipboard也表現的很是簡易操做,官方地址:http://www.steamdev.com/zclip/
使用前需引用2個js文件:jquery.js和jquery.zclip.js
<script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery.zclip.js"></script>
如今咱們使用jquery.zclip.js簡單實現複製到剪貼板功能demo以下:
<!DOCTYPE html> <html> <head> <title>ZeroClipboard Test</title> <meta charset="utf-8"> <style type="text/css"> .line{margin-bottom:20px;} /* 複製提示 */ .copy-tips{position:fixed;z-index:999;bottom:50%;left:50%;margin:0 0 -20px -80px;background-color:rgba(0, 0, 0, 0.2);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr=#30000000, endColorstr=#30000000);padding:6px;} .copy-tips-wrap{padding:10px 20px;text-align:center;border:1px solid #F4D9A6;background-color:#FFFDEE;font-size:14px;} </style> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.zclip.js"></script> </head> <body> <div class="line"> <h2>demo1 點擊複製當前文本</h2> <a href="#none" class="copy">點擊複製我</a> </div> <div class="line"> <h2>demo2 點擊複製表單中的文本</h2> <a href="#none" class="copy-input">點擊複製單中的文本</a> <input type="text" class="input" value="輸入要複製的內容" /> </div> </body> </html> <script type="text/javascript"> $(document).ready(function(){ /* 定義全部class爲copy標籤,點擊後可複製被點擊對象的文本 */ $(".copy").zclip({ path: "ZeroClipboard.swf", copy: function(){ return $(this).text(); }, beforeCopy:function(){/* 按住鼠標時的操做 */ $(this).css("color","orange"); }, afterCopy:function(){/* 複製成功後的操做 */ var $copysuc = $("<div class='copy-tips'><div class='copy-tips-wrap'>☺ 複製成功</div></div>"); $("body").find(".copy-tips").remove().end().append($copysuc); $(".copy-tips").fadeOut(3000); } }); /* 定義全部class爲copy-input標籤,點擊後可複製class爲input的文本 */ $(".copy-input").zclip({ path: "ZeroClipboard.swf", copy: function(){ return $(this).parent().find(".input").val(); }, afterCopy:function(){/* 複製成功後的操做 */ var $copysuc = $("<div class='copy-tips'><div class='copy-tips-wrap'>☺ 複製成功</div></div>"); $("body").find(".copy-tips").remove().end().append($copysuc); $(".copy-tips").fadeOut(3000); } }); }); </script>
上面代碼中結合jQuery的操做節點的功能,出色的發揮jquery.zclip.js的做用,如複製先後的操做,動態插入節點,也可見jquery.zclip.js的強大之處,使用起來是很是簡單。
從上面獨立的js庫ZeroClipboard.js和jquery.zclip.js 都是採用flash實現實現複製到剪貼板的功能,能夠看出,使用ZeroClipboard.js帶來功能相對比較少,不過它是獨立的庫,文件比較小,而使用jquery.zclip.js後的功能是比較豐富,不過對於不使用jQuery框架的站點來講,採用jquery.zclip.js是比較浪費寬帶。使用哪一種複製方式仍是得看產品的具體定位狀況~