开发中经常会用到复制的功能,在 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 : http://code.google.com/p/zeroclipboard/ 主页
核心功能
第一步,导入 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 是一个跨浏览器的事件绑定函数。详情请见4个跨浏览器必备的函数 。
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("复制成功!");
});
好了,就介绍到这里吧。赶快自己试验下吧。
分享到:
相关推荐
本文将介绍一个跨浏览器的库类 Zero Clipboard 。它利用 Flash 进行复制,所以只要浏览器装有 Flash 就可以运行,而且比 IE 的 document.execCommand(“Copy”) 更加灵活。 Zero Clipboard 的实现原理 Zero ...
Zero Clipboard是一款JavaScript库,它允许开发者通过网页上的按钮或元素将文本复制到用户的系统剪贴板上,从而实现了跨浏览器的复制功能。这个工具特别适合在网页上提供一键复制内容的服务,如复制代码片段、链接...
**Zero Clipboard** 是一个开源JavaScript库,用于在用户点击网页上的特定元素时,实现跨浏览器的复制文本到剪贴板的功能。这个库尤其方便,因为它兼容多种浏览器,包括Internet Explorer、Chrome和Mozilla Firefox...
Zero Clipboard是一款开源JavaScript库,它通过利用Flash技术来解决浏览器之间的差异,提供一个一致的用户体验,允许用户轻松地点击复制指定的文本。 描述中的“Zero Clipboard 利用 Flash 进行复制 跨浏览器兼容”...
【标题】"前端开源库-gulp-clipboard"指的是在前端开发中使用的一个开源工具,它是一个基于Gulp的插件,专门用于将文件内容轻松快捷地复制到操作系统的剪贴板。Gulp是一个自动化构建工具,它允许开发者通过定义任务...
Zero Clipboard 利用 Flash 进行复制,之前有 Clipboard Copy 解决方案,其利用的是一个隐藏的 Flash,但最新的 Flash Player 10 只允许在 Flash 上进行操作才能启动剪贴板,所以 Zero Clipboard 对此进行了改进,用...
总之,Clipboard.js v2.0.4是一个强大的JavaScript库,它简化了网页上的文本复制功能,同时避免了对Flash的依赖。通过理解和使用这个库,开发者可以提高网站的用户体验,实现更流畅的交互操作。
React-Clipboard.js是一款专为React框架设计的轻量级库,用于实现网页上的复制文本到剪贴板的功能。它基于clipboard.js库,并将其功能与React组件体系结构相结合,提供了简单易用的API,使得在React应用中添加“复制...
Zero Clipboard 利用透明的Flash让其漂浮在复制按钮之上,这样其实点击的不是按钮而是 Flash ,这样将需要的内容传入Flash,再通过Flash的复制功能把传入的内容复制到剪贴板。 Zero Clipboard的安装方法 首先需要...
Zero Clipboard 它利用 Flash 进行复制,所以只要浏览器装有 Flash 就可以运行,而且比IE的document.execCommand(“Copy”) 更加灵活。 Zero Clipboard 的实现原理 Zero Clipboard 利用 Flash 进行复制,之前有 ...
Clipboard.js是一个轻量级、无依赖的JavaScript库,专门用于实现这个功能。它使得在浏览器环境中实现复制到剪贴板的操作变得简单而直观。 **1. Clipboard.js的基本用法** 首先,你需要在HTML文件中引入clipboard....
Zero Clipboard 是一个JavaScript库,它允许用户通过模拟浏览器的复制功能,实现在网页上点击按钮后将特定文本复制到剪贴板。这个库主要用于解决浏览器安全限制,因为JavaScript通常无法直接访问剪贴板数据。Zero ...
clipboard.js是由Alex Vakulenko开发的一个轻量级的JavaScript库,它的主要功能是实现浏览器中的复制功能。这个库无需任何依赖,仅通过数据属性和事件监听器就能完成文本复制。由于其简洁的API和广泛的浏览器兼容性...
标题中的"clipboard.js_一键复制_safetyzsr_clipboard.js_"揭示了我们今天要讨论的核心技术——`clipboard.js`,这是一个轻量级的JavaScript库,主要用于实现网页中的一键复制功能。`clipboard.js`设计简洁,易于...
传统的JavaScript方法在实现跨浏览器复制功能时面临着兼容性问题,而Zero Clipboard库利用Flash技术提供了一种跨浏览器的解决方案。通过使用Zero Clipboard,开发者可以轻松实现点击某个网页元素,如按钮或者文本框...
clipboard.js是一个轻量级、易于使用的库,专门用于复制文本到剪贴板,而无需复杂的JavaScript操作。 首先,我们需要理解浏览器的安全限制。出于安全考虑,浏览器并不允许脚本直接访问剪贴板。然而,HTML5引入了新...
摘要:脚本资源,Ajax/JavaScript,剪切板 Zero Clipboard,一个比较成熟的跨浏览器兼容的“复制到剪切板”功能库,JavaScript功能Flash共同实现的功能库,兼容众多主流浏览器。