简介

clipboard.js是一款使用简单的粘贴复制插件,它不依赖于Flash或其他框架。
通过 html5 data标签属性实现粘贴复制,优点是简单无需写过多的代码。

在github拥有3万多颗星可见其优秀程度,我们将介绍在umd和vue环境下如何使用它。

github官方网站

安装方式

npm install clipboard --save

引用方式

<script src="https://www.itxst.com/package/clipboardjs/clipboard.min.js"></script>


<script src="//php.bian-jie.cn/interface/staticDownload/clipboard/clipboard.min.js"></script>
<script src="//php.bian-jie.cn/interface/staticDownload/clipboard/clipboard.js"></script>
import Clipboard from "clipboard"

在html页面中的使用案例

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>clipboard例子</title> 
    <script src="https://php.bian-jie.cn/interface/staticDownload/clipboard/clipboard.min.js"></script>
</head>
<body style="padding:10px;">
    <input id="foo" value="https://www.bian-jie.cn"/>
    <!-- Trigger -->
    <input class="btn" id="btn" data-clipboard-target="#foo" type="button"  value="复制">
    <script>
        //初始化对象
        var clipboard = new ClipboardJS('.btn');
        clipboard.on('success', function (e) {
            console.info('Action:', e.action);
            console.info('Text:', e.text);
            console.info('Trigger:', e.trigger);
            //注销对象
            e.clearSelection();
            document.getElementById("btn").value="复制成功";
        });

        clipboard.on('error', function (e) {
            console.error('Action:', e.action);
            console.error('Trigger:', e.trigger);
            document.getElementById("btn").value="复制失败";
        });
    </script> 
</body>
</html>

text 自定义函数复制

clipboard.js方法高级使用方法,如果你不喜欢像之前一样设置html的属性来实现复制,clipboard.js通过了api方式实现更佳自由的方式来实现复制功能。
<!-- Trigger -->
<input id="btn1" type="button" onclick="copy('#btn1','复制内容1')" value="点击复制">
<input class="btn2" type="button" onclick="copy('.btn2','复制内容2')" value="点击复制">
<script>
   /* 自定义复制函数
    * obj 触发器元素对象或id、class
    * text 需要复制的内容
    */
  function copy(obj, text) {
    var clipboard = new ClipboardJS(obj, {
        text: function (trigger) {
            return text;
        }
    });

    clipboard.on('success', function (e) {
        e.clearSelection();
        //document.getElementById("msg").innerHTML = "复制成功";
    });

    clipboard.on('error', function (e) {
        //document.getElementById("msg").innerHTML = "复制失败";
    });
}
</script>

target 自定义复制对象

<!-- Target -->
<div id="op">需要被复制的内容</div>
<!-- Trigger -->
<input id="btn1" type="button" onclick="copy()" value="复制内容1">
<script>
    //自定义复制函数  
    function copy() {
        var clipboard = new ClipboardJS('#btn1', {
            target: function (trigger) {
                //需要被复制内容的Dom元素对象
                return document.getElementById("op");
            }
        });

        clipboard.on('success', function (e) {
            e.clearSelection();
            document.getElementById("msg").innerHTML = "复制成功";
        });

        clipboard.on('error', function (e) {
            document.getElementById("msg").innerHTML = "复制失败";
        });
    }
</script>

container 接近焦点会发生变化的问题

比如弹出bootstrap模态框,clipboard对模态框中按钮绑定复制事件时,焦点会发生变化,这时就需要指定焦点所在容器
//自定义复制函数  
function copy() {
    var clipboard = new ClipboardJS('#模态对话框内复制按钮的id', {
        container: document.getElementById('模态对话框id'),
        text: function (trigger) {  
            return '需要被复制的字符串';
        }
    });

    clipboard.on('success', function (e) {
        e.clearSelection();
        document.getElementById("msg").innerHTML = "复制成功";
    });

    clipboard.on('error', function (e) {
        document.getElementById("msg").innerHTML = "复制失败";
    });
}

复制图片

clipboard.js 也可以复制图片到微信和word,复制到微信不能是https和base64格式,但是word、excel支持。
<div id="html">
    <!--复制到微信图片地址不能是https、也不能是base64格式 !-->
    <img src='http://www.baidu.com/img/bd_logo1.png' style='width:60px;'><br />
    <img src='http://www.baidu.com/img/bd_logo1.png' style='width:60px;'><br />
    【网站】www.itxst.com
</div>
<!-- Trigger -->
<input id="btn1" type="button" onclick="copy('#btn1')" value="点击复制">
<script>
    /* 自定义复制函数
        * obj 触发器元素对象或id、class
        * text 需要复制的内容
        */
    function copy(obj) {
        var clipboard = new ClipboardJS(obj, {
            target: function (trigger) {
                return document.getElementById("html");
            }
        });
        clipboard.on('success', function (e) {
            e.clearSelection();
            document.getElementById("msg").innerHTML = "复制成功";
        });

        clipboard.on('error', function (e) {
            document.getElementById("msg").innerHTML = "复制失败";
        });
    }
</script>

复制Base64图片

<div id="html">
    <!-- word、excel支持 !-->
    <img src='base64格式数据' style='width:50px;'><br /> 
    【搜索】复制图片
</div>
<!-- Trigger -->
<input id="btn1" type="button" onclick="copy('#btn1')" value="点击复制">
<script>
    /* 自定义复制函数
        * obj 触发器元素对象或id、class
        * text 需要复制的内容
        */
    function copy(obj, text) {
        var clipboard = new ClipboardJS(obj, {
            target: function (trigger) {
                return document.getElementById("html");
            }
        });
        clipboard.on('success', function (e) {
            e.clearSelection();
            document.getElementById("msg").innerHTML = "复制成功";
        });

        clipboard.on('error', function (e) {
            document.getElementById("msg").innerHTML = "复制失败";
        });
    }
</script>
12 共12条