ZeroClipboardを使用したクロスブラウザでのクリップボードへのコピー問題の解決法
Zero Clipboardの仕組み
Zero Clipboardは、コピーボタンの上に透明なFlashを浮かせ、ボタンをクリックする代わりに、実際にFlashをクリックし、Flashに希望のコンテンツを渡し、Flashのコピー機能で入ってきたコンテンツをクリップボードにコピーします。
Zero Clipboardのインストール方法
まず、Zero Clipboardのパッケージをダウンロードし、解凍して、フォルダ内の2つのファイルを入れてください。ZeroClipboard.jsとZeroClipboard.swfの2つのファイルをあなたのプロジェクトに入れます。
次に、コピー機能を使いたいページにZero Clipboard jsファイルを導入してください。ZeroClipboard.js
のコードは以下のようになります。
<script type="text/javascript" src="ZeroClipboard.js"></script>
注)上記のZeroClipboard.js、ZeroClipboard.swfは同じパスに存在する必要があります。同じパスにない場合は、ZeroClipboard.setMoviePath( "Flash path" );でZeroClipboard.swfのアドレスを設定することが可能です。
Zero Clipboard for simple cross-browser copying
var clip = new ZeroClipboard.Client(); // Create a new object
clip.setHandCursor( true ); // set mouse to hand type
clip.setText("haha"); // Set the text to be copied.
// Register a button with the id parameter. click this button to copy.
// The button doesn't have to be an input button, it can be any other DOM element.
clip.glue("copy-botton"); // The position is not interchangeable with the previous sentence
このように、基本的な機能は実装されており、ボタンをクリックすることで設定されたテキストをコピーすることができるわけです。コピーされるテキストは固定されていることにお気づきかもしれませんが、入力ボックスの内容をコピーするように、動的に変更したい場合はどうすればよいでしょうか。入力ボックスの内容をコピーするように、動的に変更したい場合はどうすればいいのでしょうか。心配しないでください。
Zero Clipboardの高度な機能
1. reposition() メソッド
ボタンにFlashボタンを浮かべているため、ページサイズが変わるとFlashボタンの位置がずれてしまい、クリックできなくなることがあります。気にしないでください。Zero Clipboardには、Flashボタンの位置を再計算するreposition()メソッドが用意されています。これをresizeイベントにバインドすればいいのです。例えば、次のコードは、resizeイベントを利用してボタンの位置を変更するjQueryの実装です。
$(window).resize(function(){
clip.reposition();
});
2. hide() メソッドと show() メソッド
この2つのメソッドは、Flashボタンを隠したり、表示したりすることができます。show() メソッドは reposition() メソッドを呼び出します。
3. setCSSEffects()メソッド
css ":hover"、":active"などの擬似クラスは、Flashボタンのオクルージョンにより、マウスをボタン上に移動したりクリックすると失敗することがあります。 setCSSEffects() メソッドはこの問題を解決するためのものです。まず、擬似クラスをクラスに変更する必要があります、例えば
#copy-botton:hover{border-color:#FF6633;}// は、以下の ":hover" から ".hover" に変更することができます。
#copy-botton.hover{border-color:#FF6633;}.
この方法では、Zero Clipboardが自動的にこの処理を行います。
4. getHTML()メソッド
Zero Clipboardのattachmentメソッドを使わずに、自分でFlashをインスタンス化したい場合は、このメソッドが役に立ちます。このメソッドは、Flashの幅と高さの2つのパラメータを受け取ります。戻り値は、Flashに対応するHTMLコードです。例
var html = clip.getHTML( 150, 20 );
出力にはinnerHTMLを使うか、document.write();だけでOKです。
以下は、テスト出力から組み立てたHTMLコードです。
<embed id"ZeroClipboardMovie_1" src="zeroclipboard/ZeroClipboard. swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="150" height="20" name="ZeroClipboardMovie_1&.Quot; size=" size="20" size="20"20"20"21"22" quot; align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x- shockwave-flash" pluginspage="http.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X: //www. macromedia.com/go/getflashplayer" flashvars="id=1&width=150&height=20" wmode="transparent" />。
IEのFlash JavaScript通信インターフェースにバグがあります。既存のDOM要素にobjectタグを挿入する必要があります。そして、その要素が appendChild メソッドで DOM に挿入されたことを確認してから innerHTML を記述してください。
クリップボードイベントのゼロ処理
Zero Clipboardには様々なイベントが用意されており、それらを処理する関数でカスタマイズできます。Zero ClipboardイベントハンドラはaddEventListener()で、例えばFlashが完全にロードされるとイベント "load"がトリガーされるようになります。
clip.addEventListener( "load", function(client) { )
alert("フラッシュ読み込み完了! ")。
});
Zero Clipboardは、パラメータとしてclipオブジェクトを渡します。上の例では、これが"client"にあたります。
また、"load" は "onLoad" と書くことができ、他のイベントもそのようにすることができる。
その他のイベントとしては
mouseOver マウスオーバーイベント
mouseOut マウスオーバイベント
mouseDownイベント
mouseUp マウス解放イベント
complete コピー成功イベント
mouseOverイベントとcompleteイベントがより一般的に使われています。
前述のように、コピーする内容を動的に変更する必要がある場合、mouseOver イベントは便利です。たとえば、id が test の入力ボックスの値を動的にコピーする必要がある場合、マウスオーバーしたときに値をリセットすることができます。
clip.addEventListener( "mouseOver", function(client) {
var test = document.getElementById("test");
client.setText( test.value ); // reset the value to be copied
});
//Copy success.
clip.addEventListener( "complete", function(){
alert("Copy successful! ");
});
関連
-
右スクロールバーを削除するSyntaxHighlighterメソッド
-
よく使われるHTMLリッチテキストコンパイラーの紹介 UEdit, CKEditor, TinyMCE, HTMLArea, eWebEditor, KindEditor
-
Baidu ueditorコンポーネント画像をアップロードした後、どのようにimgにalt属性を設定する
-
ueditor1.2.1 ハイパーリンクのデフォルトを変更する、ueditor editor open link in new window
-
fckeditor エディタでのカスタムページ区切り
-
Ueditor BaiduエディターのHtmlモード自動置換スタイルソリューション
-
デフォルトの新しいウィンドウを開く修正方法にリンクを追加するdecmsのckeditorエディタ
-
UEditorエディターでカスタムアップロード画像やファイルのパスを変更する方法
-
FCKeditorがクロームで表示されない
-
jsはリッチテキスト(正規表現)で最初の画像を取得します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
UEditorエディターの使用を前提とした開発 細かい配慮がなされている
-
UEditorのデフォルトフォントとフォントサイズを変更する方法
-
UeditorとCKeditorの使用方法と設定方法
-
CKEditorにsyntaxhighlighterコードハイライトプラグインを追加。
-
SyntaxHighlighterのコードハイライトで改行がない場合の対処法
-
FCKeditor + SyntaxHighlighterでコードハイライトプラグインを作る
-
jsp版ueditor1.2.5について 一部問題解決(画像のアップロード失敗)
-
Baiduのエディタueditorコンテンツエディタが自動的にPタグ、およびPタグの置換を設定する
-
プラグイン開発方式のCKEDITOR二次開発
-
BrowserSyncで自動リフレッシュ開始