最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 2019.10.20-Week-copy拷贝功能

    正文概述 掘金(进击的大羊)   2021-01-13   361

    1.复制功能

    经常遇到拷贝复制功能的开发,在项目中总结了现有拷贝功能的常见实现方法,并对其优缺点进行比较分析,便于今后开发中拷贝功能的快速实现。

    2.实现方法及原理

    现在常见的方法主要是以下两种:

    1. 第三方库:clipboard.js
    2. 原生方法:document.execCommand()

    1.document.execCommand

    MDN 上定义:

    bool = document.execCommand(aCommandName, aShowDefaultUI, aValueArgument) 方法返回一个 Boolean 值,表示操作是否成功。

    aCommandName :表示命令名称,比如:

    • copy拷贝当前选中内容到剪贴板
    • cut拷贝当前选中内容到剪贴板等
    • aShowDefaultUI:是否展示用户界面,一般情况下都是 false
    • aValueArgument:有些命令需要额外的参数,一般用不到

    兼容性:

    这个方法在之前的兼容性其实是不太好的,但是好在现在已经基本兼容所有主流浏览器了,在移动端也可以使用。 意思就是可以允许运行命令来操作可编辑区域的内容,注意,是可编辑区域。

    • 功能实现--从输入框复制

    页面上有一个input标签,复制其中的内容:

    <!--   HTML -->
    <input id="demoInput" value="hello world">
    <button id="btn">点击复制</button>
    <!--   JavaScript -->
    const btn = document.querySelector('#btn');
    btn.addEventListener('click', () => {
        const input = document.querySelector('#demoInput');
        input.select();
        if (document.execCommand('copy')) {
            document.execCommand('copy');
            console.log('复制成功');
        }
    })
    
    • 功能实现--其它地方复制

    页面上并没有input标签,可能需要从一个div中复制内容,或者直接复制变量。 在 execCommand() 方法的定义中提到,它只能操作可编辑区域,也就是意味着除了input、textarea这样的输入域以外,是无法使用这个方法的。

    <!--   HTML -->
    <button id="btn">点击复制</button>
    <!--   JavaScript -->
    const btn = document.querySelector('#btn');
    btn.addEventListener('click',() => {
        const input = document.createElement('input');
        document.body.appendChild(input);
        input.setAttribute('value', '复制内容');
        input.select();
        if (document.execCommand('copy')) {
            document.execCommand('copy');
            console.log('复制成功');
        }
     document.body.removeChild(input);
    })
    
    1. clipboard.js

    工程中复制功能就是借助于clipboard.js插件实现的,使用方法如下:

    <!--   HTML -->
    <input type="text" id="copyValue" />
    <button type="button" data-clipboard-target='#copyValue' id="bar">复制1</button>
    
    <!--   JavaScript -->
    const clipboard = new Clipboard('button');
    clipboard.on('success',function(e){
        e.clearSelection(); //清除输入框
        $('#bar').focus();
        $('#bar').select();
        $('#bar').text('已复制');
        return false;
    });
    clipboard.on('error',function(e){
        e.clearSelection();
        alert('复制失败');
    });
    

    注意到,在 <button>标签中添加了一个data-clipboard-target 属性,它的值是需要复制的 <input>id,即从整个标签中复制内容。

    有的时候我们需要在复制后做一些事情,这时候就需要回调函数的支持,复制成功、失败后执行的回调函数通过on方法监听成功、失败事件,进行相应处理。

    3.优缺点比较

    1. Clipboard.js 近几年使用较多,体积相对小,兼容性可以接受,使用还比较方便。 execCommand 新兴势力,safari等主流浏览器正在努力兼容
    2. Clipboard.js 较小,4KB; execCommanddocument方法,不用插件

    4.总结

    其实Clipboard插件本质上也是封装了selectionexecCommand方法实现的拷贝功能。

    在项目开发中,大量copy功能的实现使用插件较为方便,比如工程已经提供Clipboard.js插件的引用;在一些别的活动页面开发时,为了一两个页面中的拷贝功能实现也不需要插件的引用,直接使用document.execCommand方法。


    起源地下载网 » 2019.10.20-Week-copy拷贝功能

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元