转自:http://www.jb51.net/article/22403.htm
开发中经常会用到复制的功能,在 IE 下实现比较简单。但要想做到跨浏览器比较困难了。本文将介绍一个跨浏览器的库类 Zero Clipboard 。它利用 Flash 进行复制,所以只要浏览器装有 Flash 就可以运行,而且比 IE 的 document.execCommand("Copy") 更加灵活。
Zero Clipboard 的实现原理
Zero Clipboard 利用 Flash 进行复制,之前有 Clipboard Copy 解决方案,其利用的是一个隐藏的 Flash。但最新的 Flash Player 10 只允许在 Flash 上进行操作才能启动剪贴板。所以 Zero Clipboard 对此进行了改进,用了一个透明的 Flash ,让其漂浮在按钮之上,这样其实点击的不是按钮而是 Flash ,也就可以使用 Flash 的复制功能了。
如何使用 Zero Clipboard
首先下载 Zero Clipboard ,并解压缩。其中需要两个文件:ZeroClipboard.js 和 ZeroClipboard.swf ,将这两个文件放入到你的项目中。
下载地址
Zero Clipboard 开源的 JavaScript+flash 复制库类
演示地址:
http://demo.jb51.net/js/ZeroClipboard/index.html
核心功能
第一步,导入 ZeroClipboard.js 文件:
<script type="text/javascript" src="ZeroClipboard.js"></script>
再设置 ZeroClipboard.swf 文件的路径:
ZeroClipboard.setMoviePath( "ZeroClipboard.swf" );
注意:以上 ZeroClipboard.js, ZeroClipboard.swf 两个文件的路径都需要替换为你项目中对应文件的路径。或者也可以是一个绝对路径。
然后就使用了:
复制代码代码如下:
var clip = new ZeroClipboard.Client(); // 新建一个对象
clip.setHandCursor( true ); // 设置鼠标为手型
clip.setText("哈哈"); // 设置要复制的文本。
// 注册一个 button,参数为 id。点击这个 button 就会复制。
//这个 button 不一定要求是一个 input 按钮,也可以是其他 DOM 元素。
clip.glue("copy-botton"); // 和上一句位置不可调换
这样,这样基本功能实现了,点击按钮就可以复制设置好的文本了。你可能注意到了,待复制的文本是固定的,如果想要动态改变的怎么办,比如复制一个输入框中的内容。不用担心,下面会讲到的。
其他函数
Zero Clipboard 还提供了一些其他的函数,其中有一些非常有用。
reposition() 方法
因为按钮上漂浮有一个 Flash 按钮,所以当页面大小发生变化时,Flash 按钮可能会错位,这样就点不着了。 不要紧,Zero Clipboard 提供了一个 reposition() 方法,可以重新计算 Flash 按钮的位置。我们可以将它绑定到 resize 事件上。
复制代码代码如下:
bind(window, "resize", function(){
clip.reposition();
});
bind 是一个跨浏览器的事件绑定函数。
=========================================================
这个想必大家都已知道。IE 的事件绑定函数是 attachEvent;而 Firefox, Safari 是 addEventListener;Opera 则两种都支持。下面进行封装。
复制代码代码如下:
/************************************
* 添加事件绑定
* @param obj : 要绑定事件的元素
* @param type : 事件名称。不加 "on". 如 : "click" 而不是 "onclick".
* @param fn : 事件处理函数
************************************/
function bind( obj, type, fn ) {
if ( obj.attachEvent ) {
obj['e'+type+fn] = fn;
obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
obj.attachEvent( 'on'+type, obj[type+fn] );
} else
obj.addEventListener( type, fn, false );
}
例如添加一个页面点击事件:
复制代码代码如下:
bind(document, "click", function() {
alert("Hello, World!!");
});
=========================================================
hide() 和 show() 方法
这两个方法可以隐藏和显示 Flash 按钮 。其中 show() 方法会调用 reposition() 方法。
setCSSEffects() 方法
当鼠标移到按钮上或点击时,由于有 Flash 按钮的遮挡,所以像 css ":hover", ":active" 等伪类可能会失效。setCSSEffects() 方法就是解决这个问题。首先我们需要将伪类改成类,比如:
复制代码代码如下:
#copy-botton:hover{
border-color:#FF6633;
}
// 可以改成下面的 ":hover" 改成 ".hover"
#copy-botton.hover{
border-color:#FF6633;
}
我们可以调用 clip.setCSSEffects( true ); 这样 Zero Clipboard 会自动为我们处理:将类 .hover 当成伪类 :hover 。
getHTML() 方法
如果你想自己实例一个 Flash ,不用 Zero Clipboard 的附着方法,那么这个方法就可以帮上忙了。它接受两个参数,分别为 Flash 的宽度和高度。返回的是 Flash 对应的 HTML 代码。例如:
var html = clip.getHTML( 150, 20 );
你可以用 innerHTML 或直接 document.write(); 进行输出。
以下是我测试下输出的 HTML 代码:
<embed id="ZeroClipboardMovie_1" src="zeroclipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="150" height="20" name="ZeroClipboardMovie_1" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=150&height=20" wmode="transparent" />
IE 的 Flash JavaScript 通信接口上有一个 bug 。你必须插入一个 object 标签到一个已存在的 DOM 元素中。并且在写入 innerHTML 之前请确保该元素已经 appendChild 方法插入到 DOM 中。
Zero Clipboard 事件处理
Zero Clipboard 提供了一些事件,你可以自定义函数处理这些事件。Zero Clipboard 事件处理函数为 addEventListener(); 例如当 Flash 完全载入后会触发一个事件 "load" 。
clip.addEventListener( "load", function(client) {
alert("Flash 加载完毕!");
});
Zero Clipboard 会将 clip 对象作为参数传入。即上例中的 "client" 。
还有 "load" 也可以写成 "onLoad",其他的事件也可以这样。
其他事件还包括:
mouseOver 鼠标移上事件
mouseOut 鼠标移出事件
mouseDown 鼠标按下事件
mouseUp 鼠标松开事件
complete 复制成功事件
其中 mouseOver 事件和 complete 事件比较常用。
前面说过,如果需要动态改变待复制的内容,那 mouseOver 事件就可以派上用场了。例如需要动态复制一个 id 为 test 的输入框中的值,我们可以在鼠标 over 的时候重新设置值。
clip.addEventListener( "mouseOver", function(client) {
var test = document.getElementById("test");
client.setText( test.value ); // 重新设置要复制的值
});
复制成功:
clip.addEventListener( "complete", function(){
alert("复制成功!");
});
好了,就介绍到这里吧。赶快自己试验下吧。
分享到:
相关推荐
标题中的"CSDN剪切板"是一个专门设计用于实现跨浏览器复制功能的工具,它旨在解决在不同浏览器间实现文本复制兼容性的问题。这个工具特别强调支持Internet Explorer(IE)、Chrome和Mozilla Firefox,这些都是市场上...
标题中的“ZeroClipboard跨浏览器复制到剪切板”是指一个JavaScript库,它的主要功能是允许用户在网页上通过点击按钮或者其他交互方式,实现文本内容复制到计算机的剪切板。这个功能在现代网页应用中非常常见,比如...
在现代Web开发中,实现“跨浏览器复制到剪切板”的功能已经成为提升用户体验的重要一环。用户能够方便地复制网页中的文本,极大地提高了信息传递的效率。本篇将详细讲解如何利用JavaScript、jQuery以及第三方库...
标题中的“ZeroClipboard解决跨浏览器复制到剪贴板的问题”是指在网页开发中,使用ZeroClipboard这个开源库来实现跨浏览器的文本复制功能。在Web应用程序中,由于浏览器的安全限制,JavaScript无法直接操作用户的...
`ZeroClipboard`和`clipboard`分别代表了不同时期的跨浏览器复制文本的解决方案。对于新项目,推荐使用`clipboard`,因为它更轻量、更现代且不依赖Flash。但对于需要支持旧版浏览器的项目,`ZeroClipboard`仍是一个...
转载而来:jquery.zclip.1.1.1.zip 利用zclip插件完成跨浏览器复制粘贴板功能。 自己之前有找很久,但发现零碎,而后也算千辛万苦找到一个合适并测试成功的(zclip转载而来并不是自己写的), 附上之前我所参考的例子 ...
这些文件的结合使用,可以为开发者提供一个完整的跨浏览器复制粘贴功能的实例,帮助他们理解和实现类似的需求。通过阅读源码和测试这些工具,开发者能够学习到如何处理浏览器差异,如何监听和响应用户事件,以及如何...
ZeroClipboard是一款可以在网页中实现跨浏览器复制文本到剪贴板功能的JavaScript库。其工作原理是利用Flash实现跨浏览器复制,通过在复制按钮上方浮动一个透明的Flash影片,使得用户点击按钮时,实际上是在与Flash...
- **jQuery zclip插件**: 是一个jQuery扩展,专门用于跨浏览器复制文本到剪切板。 - **跨浏览器复制功能**: 指的是在不同的浏览器环境中提供一致的功能,特别是复制粘贴的文本操作。 ### 描述知识点: - **兼容...
FlashCopy就是这样一个利用Flash实现跨浏览器复制功能的解决方案。 - **HTML5的Clipboard API**:随着HTML5的普及,`Clipboard API`应运而生,它为浏览器提供了安全的剪贴板操作接口,无需借助Flash。然而,早期的...
Zero Clipboard一个比较成熟的跨浏览器兼容的“复制到剪切板”功能库,需要放在项目里使用
标题"Zero Clipboard 利用 Flash 进行复制 跨浏览器兼容"指出,这是一个关于使用Zero Clipboard库实现跨浏览器的文本复制功能的技术。Zero Clipboard是一款开源JavaScript库,它通过利用Flash技术来解决浏览器之间的...
在Web开发中,"跨浏览器将文字复制到剪粘板"是一个常见的需求,尤其是在交互性较强的应用中。这个功能使得用户能够方便地复制网页上的文本并粘贴到其他地方,如电子邮件、文档编辑器或者其他的Web应用。由于浏览器的...
Zero Clipboard实现简单跨浏览器复制 var clip = new ZeroClipboard.Client(); // 新建一个对象 clip.setHandCursor( true ); // 设置鼠标为手型 clip.setText("哈哈"); // 设置要复制的文本。 // 注册一个 button,...
ZeroClipboard 是一个JavaScript库,主要用于实现网页上的跨浏览器复制功能,尤其在处理用户希望复制文本到剪贴板的场景中非常实用。这个库巧妙地利用了Adobe Flash技术,因为Flash在浏览器中的广泛支持,可以绕过...
总的来说,ZeroClipboard提供了一种方便的跨浏览器复制功能,尽管随着技术的发展,其依赖的Flash插件可能会逐渐失去支持,但在目前仍然是一种实用的解决方案。理解它的基本用法和工作原理,可以帮助开发者为用户提供...
在Web开发中,文本复制功能对于提升用户体验有着举足轻重的作用。然而,跨浏览器实现文本复制并非易事,尤其是...尽管如此,它仍然是一个实现跨浏览器复制功能的便捷工具,尤其对于那些需要兼容老旧浏览器的应用来说。