论zeroclipboard的各种爽翻天用法

基于一种普度众生的心理,决定把这次坑了我两天的小插件zeroclipboard(以下简称为“这个他喵的坑了我两天害我被公司的小弟鄙视说另一个小弟都能轻易搞定你却不行哈哈哈我擦嘞的插件”)使用心得分享一下,希望大家不要被同样的坑坑到。

本文主要涉及:

  1. 插件的基本原理
  2. 普通的插件用法与注意事项
  3. 文艺的seajs引用方法与注意事项
  4. 2B的PO主被坑的教训

对于本插件的使用一定要在服务器环境下才可以生效,本地或远程都可以

如果你是个有追(zi4)求(lian4)的人,完全没有COPY过,那么恭喜你,已经完成一半了,因为有部分代码表面上是可以跑起来,但实际使用就不是那么一回事了。还有,本文是跟大家分享如何优雅地实现这个功能,你要是牛B到写个200行的代码才跑通…………请珍惜自己的双手~~~~

使用这种知名插件当然是要去github上看文档咯~~~:2.X的使用文档 1.X的使用文档 (文中均以1.x为例,2.x中除事件名与个别小细节外基本一致)

插件的基本原理:

就是将要复制的内容设置为flash插件的数据,再通过flash的接口复制到剪贴板中。这样做最大的好处就是照顾到页面本身的兼容性,HTML5中虽然提供了读取剪贴板的方法但写入内容还不支持(至少我是没成功过)。但是这样做有个安全问题,flash插件可以随时访问你的剪贴板内容,如果你刚好复制了你的敏感信息(比如密码),又访问了这个网页,那么它就可以轻易地获取你的数据并传到他自己的服务器上,所以之后的版本中特意加入了一定要用户点击相应的swf文件才可以获取信息的限制,所以就要求引入的swf插件要覆盖用户点击的部分,带来的问题就是会影响hover伪类、样式和相应事件的触发,当然,在插件中会对此进行对应的弥补设置的

插件的使用主要包括三个部分:插件自身的JS文件、基于flash的swf插件、你写的控制代码(这TM不是废话吗)

普通应用版:

声明插件的实例同时把元素节点作为参数传进去,就可以使用了。

var client = new ZeroClipboard($("#my-button"),{
    swfPath: "path/to/ZeroClipboard.swf"
});

配置参数中可选项很多,详细说明请点击

主要参数有以下几点:

swfPath/moviePath指定引入swf文件的位置,虽然默认会查找同目录下的文件但还是建议写一下比较好。

trustedDomains可信域的设置,这个后面还会讲到。

hoverClass和activeClass用来解决上文提到的覆盖的影响,如果当前元素有hover伪类的效果,要重定义在配置文件中,如

{ hoverClass: /*你重定义后的名字*/}

debug: true  输出调试信息。

当然在DOM中也要有相应的元素(本例中是id为”my-button”的button)来触发事件

<button id="my-button" data-clipboard-text="Copy me!">Copy to Clipboard</button>

其中 data-clipboard-text就是最基础的一种用法,如果元素没有用后续的方法添加事件的话就会复制代码中”Copy me!”这段到剪贴板中,适用于复制固定内容,无格式,短小。比如某些招商页面的电话等信息。

如果你想让复制功能对应网页上的某段内容就要用到另一个属性:data-clipboard-target

<button id="my-button_text" data-clipboard-target="clipboard_text">Copy to Clipboard</button>
<button id="my-button_textarea" data-clipboard-target="clipboard_textarea">Copy to Clipboard</button>

<input type="text" id="clipboard_text" value="Clipboard Text"/>
<textarea id="clipboard_textarea">Copy This!</textarea>

这样的话DOM节点就会复制指定ID的内容或值了,注意是ID名哦。这种情况主要适用于页面上单一 内容的复制,比如生成短链接后的复制这种。虽然可以自己修改要复制的内容了,但是针对页面多个节点就无能为力了。

最后是重头戏,针对页面上多节点统一绑定事件复制指定结构选择器的内容:

      var client = new ZeroClipboard( $(‘.clip_button‘) );

      client.on( ‘load‘, function(client) {
        // alert( "movie is loaded" );

        client.on( ‘datarequested‘, function(client) {
          client.setText(this.innerHTML);
        } );

        client.on( ‘complete‘, function(client, args) {
          alert("Copied text to clipboard: " + args.text );
        } );
      } );

      client.on( ‘wrongflash noflash‘, function() {
        ZeroClipboard.destroy();
      } );

其中红名为插件定义的事件名,重点在datarequested事件中,可以使用当前节点的选择器复制指定内容,比如可以改成:client.setText($(this).prev().text()); 类似这种的选择。

文艺(SeaJS)应用版:

内容相同,只不过是用seajs引用模块的方式来调用插件

seajs.use([‘gallery/zeroclipboard/1.3.5/zeroclipboard‘], function(ZeroClipboard) {}

支付宝的Arale库中目前仅支持到1.3.5版,其它的库中自行参照格式调用,需要注意的是在swf文件引入的时候可能会因为文件位置造成跨域通信的安全禁止,这时要在实例化中配置trustedDomain免于载入失败

var client = new ZeroClipboard($(".clipbord"), {
  moviePath: "http://static.alipayobjects.com/gallery/zeroclipboard/1.3.5/ZeroClipboard.swf",
  trustedDomains: [‘*‘]
});

经历后的教训:

  1. 不要随便copy别人的代码来用,更不要没有效果就放弃并抱怨
  2. 即使是作者在github上的demo也有可能因为种种原因出现偏差,要记得关注FAQ并主动提问
  3. 作者在开发插件时应用的设计思想很值得学习,提供多种调用方式,由简至繁,保证初级用户的使用方便和高级用户的自定义需要。在更新版本时也很好地兼容了老版的使用方法,并作出隐性提示。
  4. 代码会过期,会失效,但设计思想理念永存,好好学习!

论zeroclipboard的各种爽翻天用法

时间: 2024-08-14 01:37:03

论zeroclipboard的各种爽翻天用法的相关文章

爽翻天!告别Java。一起来使用kotlin开发完整客户端

必须写在前面:从Java转向Kotlin,只需要几天时间! 本篇是kotlin开发Android系列教程的最后一篇.前面几篇介绍了kotlin的基本语法.与java的不同之处等.在本篇文章中,将使用到前面的知识点,从零开发一款Gank.io 干活集中营App(感谢Gank提供的Api). 该App完全使用了Kotlin语言开发,基于MVP模式,并使用如下主流开源框架: Kotlin Dagger2 Rxjava DataBinding Retrofit Okhttp3 DeepLinkDispa

跨浏览器复制神器 ZeroClipboard 2.x快速入门详解

有些时候,我们希望让用户在网页上完成某个操作就能自动将指定的内容复制到用户计算机的剪贴板中.但是出于安全原因,大多数现代浏览器都未提供通用的剪贴板复制接口(或即便有,也默认被禁用).只有IE浏览器可以通过如下方式来进行复制. window.clipboardData.setData("Text", "这里是需要复制的文本内容") 想要实现跨浏览器的复制功能,我们就可以使用 ZeroClipboard. ZeroClipboard 及其原理介绍 ZeroClipboa

BZOJ 1269 文本编辑器 Splay

题目大意:维护一个文本编辑器,支持下列操作: 1.将光标移动到某一位置 2.在光标后插入一段字符串 3.删除光标后的一段字符 4.翻转光标后的一段字符 5.输出光标后的一个字符 6.光标-- 7.光标++ Splay中比较水的一道题,标记只有区间翻转,也不用维护区间总值,唯独需要注意的就是插入的时候fa要记得赋值,不然就会像本蒟蒻一样调半天,,, 这题要注意的是Insert操作的读入 首先读入第一个不是'\n'或者'\r'的字符,然后如果长度不为1就继续gets() 记住是get()不是scan

vim开发环境配置

看了效果图,肯定有人说, 这都有啥功能?花瓶? 告诉你,你说花瓶就错了,我们部落可都是实打实的人,说谎都不会,咋会忽悠人呢. 下面我来告诉你,这都有些什么功能: 1.文件索引功能,也就是可以知道这个文件里面有哪些函数,变量,宏定义,结构体,类等等 2.文件目录,可以通过目录窗口来打开自己想要打开的文件 3.基本编辑功能不用说了 4.自动补全文件功能,特别是include的时候,根据路径自动补全,选你想要的文件 5.自动补全类成员,函数,命名空间等 6.语法高亮,提供类型关键字,函数等高亮,当然函

digitalocean Vultr Linode 三家海外vps最新真实情况

中国有大批用户,在使用海外vps服务器.好处是不言而喻的:性价比高.带宽大.免备案.可搭梯子,没有后门监控. 有趣的是,每一年的周期观察,都能发现海外vps对中国大陆的线路速度.可用性变化.过去速度快线路稳定的vps,可能现在已经卡成翔.所以如果你近期要采购vps服务器,最好看下近期的各家性能表现. digitalocean:美国西海岸机房稳定.性价比中庸 digitalocean新增SFO 2号机房,是对中国用户来说相当不错的选择.印度机房虽然距离中国近,但线路并未优化,速度不如美国西海岸机房

【51CTO学院】预热4周年庆,福利领领领!!!

4年前的7月1日,51CTO学院平台诞生了!自此每年的7月1日,学院都会为粉丝们准备一大福利,今年也不例外,而且是两大波!!!来来来~~~我们先看看第一波,第二波福利比第一波大了NNNNNNN倍,文章最后会有剧透哟 ^_^ 51CTO学院4周年回馈新老粉丝福利 ~~~ 第一波 ~~~ 福利1: 讲师的第一次亲密接触: 了解更真实的学院讲师,走进他们的生活与工作,来@51CTO学院微博(http://weibo.com/51ctoedu)看看他们的趣事视频吧!每日更新~ 福利2: 学分兑换数量质量

一支巧乐兹引发的感想(这个标题实在没有创意)

编者按:小凯又開始调皮了,文艺激素泛滥无处释放.仅仅好把一个巧乐兹的感想与超级表格联系到一起. 好吧,给你发吧. 提笔之时,已然忘记自己要写些什么.填饱肚皮后仰视天空之时突然想了起来:本王还要去买一支巧乐兹···哦,还有要去写关于巧乐兹的感想.果然.吃饭才是本王生活中最大的哲学. 从小到大糟践过无数的雪糕. 从最廉价的步步高冰块两三毛一袋.到最贵仅仅是耳闻的伪高端哈根达斯.这么多品牌感觉唯有巧乐兹在记忆旅行的開始就像老朋友一样存在了.那种甜到爆表的巧克力脆糖最终让长大后喜欢甜食的本王意识到:这.

如果把编程语言比作武器

来自bjorn的一篇吐槽文. C 是经久不衰的M1半自动来复,虽然有些时日了但稳定压倒一切. c++ 是威力强大的双截棍,看看李小龙使它的时候那鼓威风劲你就领悟了.但问题是掌握它需要很长段时间,而在这段时间内经常是把自己打得鼻青脸肿而不是敌人. Perl是莫洛托夫鸡尾酒,偶尔会很有用,但现今用的人已少. Java是架240发全自动冲锋枪,扫起来爽翻天,前提是弹夹没空.一旦弹夹空了会发生NullPointerException异常,表明这枪就报废了然后你就挂了. Scala跟Java的冲锋枪没差,

react案例-&gt;新闻移动客户端--(react+redux+es6+webpack+es6的spa应用)

今天分享一个react应用,应在第一篇作品中说要做一个react+redux+xxx的应用.已经做完一部分,拿出来分享.github地址为:点我就可以咯~ 这里实现了一个新闻移动站的spa.本来想写pc端的,但是比较懒,而且因为主要是react的项目,关于css和布局的细节就是糊弄人的了.T.T,这里只说关于这个项目的js部分. 这里的功能很简单,有一下几点: 1,按”心“排序 当比上一个多了,就会排到前面. 2.评论部分 新闻的评论部分类似qq空间的评论 当然,也可以点击新闻回复的哦. ===