美文网首页
js实现一键复制

js实现一键复制

作者: conankids | 来源:发表于2017-12-26 20:22 被阅读0次

最近做一个小功能,需要实现一键复制,由于之前用过jq的ZeroClipboard,原理是通过flash来实现复制功能,因为现在各大浏览器都在‘打压’flash,默认都会把flash关闭掉,优先使用h5,所以就没再次试用了!

总结下当下的集中复制实现形式:

1、基于flash的jq的ZeroClipboard

优点:兼容性好,可易兼容ie(上古时代的破玩意)

缺点:(1)由于现代浏览器抛弃了flash,所以让基于flash的该方法也被限制的死死的,我要是用户,每次都让我手动开启flash!?are you kidding me!?    (2)体积大     (3)移动端不可用

2、h5的新api->execCommand('copy')

优点:简单、方便、不需要引入第三方库,对于复制要求度不高的需求很方便

缺点:兼容性不是特别好,ie9以下,ios不兼容

实现:

$('.copy').click(function (e) {

    e.stopPropagation();

/*待选中内容非输入框*/

    window.getSelection().removeAllRanges();//清除当前页面中的选中区域

    var range = document.createRange();//创建range对象

    range.selectNode(document.getElementById("copyNode"));//选择节点

    window.getSelection().addRange(range);//把range对像放入selection对象

/*待选中内容为输入框*/

$('#copyNode').select();

    var tag = document.execCommand('copy'); //一键复制

    if (tag) {

        window.getSelection().removeAllRanges();//复制完成后清除选中区域

        layer.msg('复制成功');

}

});

主要是使用range对象selection对象以及document.execCommand('copy')方法来实现的!

我选用的这种所以贴上的代码🤓!

原理:先创建一个range对象,选中需要复制的节点,把range对象放入selection对象中(代替我们手动选中的操作),然后利用execCommand方法放到粘贴板上,打完收工!

3、Clipboard.js 封装后execCommand('copy')

优点:体积小啊,功能全啊,兼容性也好啊,移动pc通吃哦(除ie低版本)

缺点:跟execCommand方法一样,毕竟核心方法不变

其他如ie的setData,这些用的少的就不介绍了!

第一次写文章,希望能给需要的人一点帮助!

相关文章

网友评论

      本文标题:js实现一键复制

      本文链接:https://www.haomeiwen.com/subject/knmsgxtx.html