Zero Clipboard的實(shí)現(xiàn)原理
Zero Clipboard 利用透明的Flash讓其漂浮在復(fù)制按鈕之上,這樣其實(shí)點(diǎn)擊的不是按鈕而是 Flash ,這樣將需要的內(nèi)容傳入Flash,再通過(guò)Flash的復(fù)制功能把傳入的內(nèi)容復(fù)制到剪貼板。
Zero Clipboard的安裝方法
其實(shí)也不算安裝啦,就是使用前的準(zhǔn)備工作。
首先需要下載 Zero Clipboard的壓縮包,解壓后把文件夾中兩個(gè)文件:ZeroClipboard.js 和 ZeroClipboard.swf 放入到你的項(xiàng)目中。
Zero Clipboard : [項(xiàng)目主頁(yè)] [zip下載] [在線(xiàn)演示]
然后把在你要使用復(fù)制功能的頁(yè)面中引入Zero Clipboard的js文件:ZeroClipboard.js
如下代碼:
<script type="text/javascript" src="ZeroClipboard.js"></script>注意:以上 ZeroClipboard.js, ZeroClipboard.swf需要放在同一路徑下。如果不在同一路徑,可使用ZeroClipboard.setMoviePath( “Flash路徑” );來(lái)設(shè)置ZeroClipboard.swf 地址
Zero Clipboard實(shí)現(xiàn)簡(jiǎn)單跨瀏覽器復(fù)制
var clip = new ZeroClipboard.Client(); // 新建一個(gè)對(duì)象
clip.setHandCursor( true ); // 設(shè)置鼠標(biāo)為手型
clip.setText("哈哈"); // 設(shè)置要復(fù)制的文本。
// 注冊(cè)一個(gè) button,參數(shù)為 id。點(diǎn)擊這個(gè) button 就會(huì)復(fù)制。
//這個(gè) button 不一定要求是一個(gè) input 按鈕,也可以是其他 DOM 元素。
clip.glue("copy-botton"); // 和上一句位置不可調(diào)換這樣,這樣基本功能實(shí)現(xiàn)了,點(diǎn)擊按鈕就可以復(fù)制設(shè)置好的文本了。你可能注意到了,待復(fù)制的文本是固定的,如果想要?jiǎng)討B(tài)改變的怎么辦,比如復(fù)制一個(gè)輸 入框中的內(nèi)容。不用擔(dān)心,下面會(huì)講到的。
Zero Clipboard的高級(jí)功能
1、reposition() 方法
因?yàn)榘粹o上漂浮有一個(gè) Flash 按鈕,所以當(dāng)頁(yè)面大小發(fā)生變化時(shí),F(xiàn)lash 按鈕可能會(huì)錯(cuò)位,這樣就點(diǎn)不著了。 不要緊,Zero Clipboard 提供了一個(gè) reposition() 方法,可以重新計(jì)算 Flash 按鈕的位置。我們可以將它綁定到 resize 事件上。如下面代碼是在jQuery下實(shí)現(xiàn)的resize事件重新設(shè)置按鈕位置:
$(window).resize(function(){
clip.reposition();
});2、hide() 和 show() 方法
這兩個(gè)方法可以隱藏和顯示 Flash 按鈕 。其中 show() 方法會(huì)調(diào)用 reposition() 方法。
3、setCSSEffects() 方法
當(dāng)鼠標(biāo)移到按鈕上或點(diǎn)擊時(shí),由于有 Flash 按鈕的遮擋,所以像 css “:hover”, “:active” 等偽類(lèi)可能會(huì)失效。setCSSEffects() 方法就是解決這個(gè)問(wèn)題。首先我們需要將偽類(lèi)改成類(lèi),比如:
#copy-botton:hover{
border-color:#FF6633;
}
// 可以改成下面的 ":hover" 改成 ".hover"
#copy-botton.hover{
border-color:#FF6633;
}我們可以調(diào)用 clip.setCSSEffects( true ); 這樣 Zero Clipboard 會(huì)自動(dòng)為我們處理:將類(lèi) .hover 當(dāng)成偽類(lèi) :hover 。