20⾏JS代码实现粘贴板复制功能
使⽤剪贴板是⼀项基本技能。作为码农都应知道, Tab , Ctrl/Cmd + A , Ctrl / Cmd + C 以及 Ctrl / Cmd + V 分别是⾃动聚焦、复制、粘贴的快捷键。
⽽对普通⽤户可能就不太容易了。即使⽤户知道剪贴板是什么,(除了)那些眼神极好或反应很快的⼈,其他情况下很难以突出显⽰他们想要的确切⽂字。若⽤户不知道键盘快捷键,也看不到隐藏的编辑菜单,或从未使⽤右键菜单或不知道长按触屏弹出选项菜单,那么他很可能⽆法察觉到复制功能。
那么我们是否应该提供⼀个“复制到剪贴板”按钮来帮助⽤户?这功能应该会很有⽤,即使是对快捷键的⼈⾮常熟悉的⽤户来说。
关于剪贴板的安全
⼏年前,浏览器不可能直接使⽤剪贴板。开发⼈员不得不通过Flash来实现。
剪贴板看起来⽆关紧要,但想象⼀下,如果浏览器能够随意查看和操作内容,会发⽣什么。JS脚本(包括第三⽅脚本)能查看剪贴板内的⽂本信息,并将密码,
敏感信息甚⾄整个⽂档发送到远程服务器。
现在的剪贴板基本功能有限,有如下限制:
1. ⼤多数浏览器⽀持剪贴板,除了Safari。
2. ⽀持因浏览器⽽异,有些功能不完整或有问题。
3. 事件必须由⽤户必须发起,如点击⿏标或按下键盘。脚本不能⾃由访问剪贴板。
此⽅法就是实现剪贴板的关键,它可以传⼊ cut , copy , paste 三种参数。从最常⽤的Command('copy')开始介绍。
在使⽤之前,我们应该检查浏览器是否⽀持 copy 命令: document.queryCommandSupported('copy'); 或document.queryCommandEnabled('copy'); ,这两个⽅法效果相同。
但在Chrome下,尽管Chrome确实⽀持使⽤ copy 命名,但两个⽅法都返回 false 。所以最好是将检查代码包在⼀个 try-catch 代码块中。
一夫当关的下一句下⼀步,我们应该允许⽤户复制什么呢?必须突出显⽰⽂本,所有浏览器都可⽤ select() ⽅法选择⽂
本input和textarea内的⽂本。同时Firefox和Chrome / Opera也⽀持 ateRange ⽅法,该⽅法允许从任何元素中选择⽂本,如下:
// select text in #myelement node
var
myelement = ElementById('#myelement'),
range = ateRange();
range.selectNode(myelement);风王干湿两用吸尘器
但IE / Edge不⽀持。
clipboard.js
若你不想⾃⼰实现⼀个较为健壮的跨浏览器剪贴板⽅法的话, clipboard.js 可以帮你。它有好⼏种设置选项的⽅式,如H5的data属性,设置绑定触发元素以及⽬标元素,如:
<input id="copyme" value="text in this field will be copied" />
<button data-clipboard-target="#copyme">copy</button>
⾃⼰动⼿实现
clipboard.js⼤⼩仅2Kb,若仅实现如下的部分功能的话,那么可以在20⾏的代码内实现:
仅部分表单元素可被复制
王子文多高若在不⽀持的浏览器中(没错,就是指Safari),可突出显⽰选中⽂本,并提⽰⽤户按 Ctrl / Cmd + C 。
像clipboard.js⼀样,先创建⼀个button⽤于触发⽅法,它具有⼀个data属性 data-copytarget ,指向要copy的元素(即 #website )
万能网卡驱动怎么用<input type="text" id="website" value="www.sitepoint/" />
<button data-copytarget="#website">copy</button>
郑爽胡彦斌恋情⼀个⽴即执⾏函数表达式绑定click事件的函数,该函数⽤于解析 data-copytarget 属性内容,选择对应
字段的⽂本并执⾏ Command('copy') ,。若失败,⽂本保持选中状态,显⽰提⽰框:(function() {
'use strict';
// click events
document.body.addEventListener('click', copy, true);
// event handler
function copy(e) {
// find target element
var
t = e.target,
c = pytarget,
inp = (c ? document.querySelector(c) : null);
// is element selectable?
if (inp && inp.select) {
// select text
inp.select();
try {
// copy text
inp.blur();
}
catch (err) {
alert('please press Ctrl/Cmd+C to copy');
}
}
}
})();
虽然在上例中,算上样式和动画的代码,代码已经超过20⾏了,但动画和样式是可选的。
总结:
1. 通过 .select() 选择要复制的表单元素的内容
2. 调⽤ Command("copy") ⽅法
3. 调⽤ .blur() ⽅法,从表单元素中移除焦点
4. 将第2、3步包在 try catch 块中,在不⽀持的浏览器下则提⽰
其他⽅式
有很多新颖的剪贴板应⽤⽅式。例如 ,将⿏标悬停在卡⽚上时,可以按 Ctrl / Cmd + C 并将该卡⽚的链接地址复制到剪贴板。其背后实现的⽅式为:先创建⼀个包含URL的隐藏表单元素,然后选中并复制其内容。⾮常巧妙且实⽤ —— 我怀疑很少有⽤户知道这个功能!
总结
以上所述是⼩编给⼤家介绍的20⾏JS代码实现粘贴板复制功能,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!
电压力锅使用
发布评论