Vue 下 浏览器 点击实现复制功能

挣脱家的怀抱 

回归出租房

淡去一身年味

你我

依旧

仍是

打工仔

哈哈哈

2-13

开工大吉

---------------------------------

效果示例 

实现技术  

clipboard
clipboard 优势 
独立
不依赖Flash
轻量化
压缩后仅3kb.

安装

可以通过 npm 来安装它。

npm install clipboard --save

使用

引入到项目之中即可食用

 

利用html5 data属性的特性

所有主流浏览器都支持 data-* 属性。

相关详参 w3school:http://www.w3school.com.cn/tags/att_global_data.asp

 

使用场景 分为三个

我使用的是直接从属性复制文本内容 顾名思义 直接在拷贝的目标元素上加入自定义属性  data-clipboard-text 即可

其中的url可直接定义内容,也可为动态变化的内容 看项目需求

另外还有两种

① data-clipboard-target 属性

类似上面的属性复制文本

这里属性的目标为一个 元素名

例子

② data-clipboard-action 属性   action后分为两种类型 copy cut 复制 或 剪切

剪切内容 只在textarea标签下有效 默认为copy

 <div class="bottom"  v-show="creatShow">
                <el-button class="share-btn" ref="can" size="small" :disabled="isdis" @click="yesBtn">创建链接</el-button>
                <el-button class="share-btn cancelBtn"  size="small" @click="cancelbtn" >取消</el-button>
            </div>
            <div class="bottom"  v-show="!creatShow">
                <el-button class="share-btn ctrlBtn" size="small" @click="ctrlCBtn"  :data-clipboard-text="url">复制链接</el-button>
            </div>
        </div>
        <input id="target" value="https://www.baidu.con">
        <div class="bottom" v-show="!creatShow">
             <el-button class="share-btn ctrlBtn" size="small" @click="ctrlCBtn" data-clipboard-target="#target">复制链接</el-button>
        </div>

        <textarea id="target">需要复制的内容  人生如梦 江湖天涯 大梦一场</textarea>
         <div class="bottom" v-show="!creatShow">
             <el-button class="share-btn ctrlBtn" size="small" @click="ctrlCBtn" data-clipboard-action="cut" data-clipboard-target="#target">复制内容</el-button>
        </div>

最后  核心  同事件触发 开始工作

直接上代码了 实例化 clipboard 对象 在他的成功失败回调函数中进行操作 照顾到内存优化 需要进行释放

 

亲测 Safari Chrome 能用  仅测试web端

 //复制链接
        ctrlCBtn(){
            let self = this;
            let clipboard = new Clipboard('.ctrlBtn');
            clipboard.on('success', function(e) {
             self.$message({ message: "已复制至剪贴板", type: "success" ,duration:1500});
             setTimeout(()=>{
                //  self.$emit("closeshare")
             },2000)
             e.clearSelection();
             // 释放内存  
             clipboard.destroy()  
            });
            //失败回调
            clipboard.on('error', function(e) {
                self.$message({ message: "该浏览器不支持一键复制,请手动复制", type: "warning" ,duration:1500});
                setTimeout(()=>{
                 self.$emit("closeshare")
                },2000)
                // 释放内存  
                  clipboard.destroy()
            });
        }

 

完事儿~~~
给大家拜个晚年~~~
新年快乐~~~
2019~~~
继续努力~
继续奋斗~
今年的心态大有变化~
不知是好事坏事~~~
加油吧~~
posted @ 2019-02-15 15:35  三行代码  阅读(2232)  评论(0编辑  收藏  举报