2020年12月31日

动态复制文字

作者 rourou

通过点击复制触发接口,并将返回的数据复制到粘贴板上。

1、通过原生js编写需通过input的方式作为中间件实现。

<div onclick="copyContact()">点击复制</div>
  </div>
  <script>
    function copyContact() {
        var oInput = document.createElement('input');
        oInput.value = "需复制的文字";//文字
        document.body.appendChild(oInput);
        oInput.select();
        document.execCommand("Copy");
    }
  </script>

input不能使用display:none隐藏或者hidden属性。

2、clipboard.js插件,通过该插件可以将输入框,文本域,DIV元素中的文本等文本内容复制或者剪切到剪贴板中 。

<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js"></script>

实现复制或剪切某一个元素的值,可通过配置一下两个属性实现(节点不能通过display隐藏,或者input不能hidden。若不想页面有显示可通过函数式实现)

  • data-clipboard-target指向需复制或剪切的节点
  • data-clipboard-action方法,提供复制copy、剪切cut。默认copy
<!-- input复制 -->
    <input id="foo" type="text" value="Copy">
    <button class="btn" data-clipboard-action="copy" data-clipboard-target="#foo">Copy</button>
    <!-- textare剪切 -->
    <textarea id="bar">Cut</textarea> 
    <button class="btn" data-clipboard-action="cut" data-clipboard-target="#bar">Cut</button>
    <!-- div复制 -->
    <div>hello_div_Copy</div>
    <button class="btn" data-clipboard-action="copy" data-clipboard-target="div">Copy</button>
//   js
    var clipboards = new ClipboardJS('.btn');
    clipboards.on('success', function(e) {
        alert("链接复制成功");
    });
    clipboards.on('error', function(e) {
        console.log(e);
    });

通过属性返回需复制或剪切的值,需配置data-clipboard-text属性

<div class="btn" data-clipboard-text="1">
        <span>Copy_attr_text</span>
 </div>
 //   js
    var clipboards = new ClipboardJS('.btn');
    clipboards.on('success', function(e) {
        alert("链接复制成功");
    });
    clipboards.on('error', function(e) {
        console.log(e);
    });

通过方法的形式配置target返回需复制的节点或者text返回需复制的值。可以通过该方法实现复制通过接口返回的数据

function copyContact() {
        let clipboard = new ClipboardJS('#btn_Share', {
            text: function () {
                return '文本';
            }
        });
    }
    
    function copyContact_target(){
        let clipboard = new ClipboardJS('#btn_share_target', {
            target: function () {
                return  document.querySelector('#div');
            }
        });
    }

你也可以通过运行ClipboardJS.isSupported(),来检查是否支持就可以显示/隐藏按钮

可通过clipboard.destroy()清除实例