React 中实现复制到剪切板功能

  • 前言
  • 最终实现方法
  • 中间踩坑

前言

最近有一个需求是在文章列表中实现一个【复制链接】的功能。如图:


点击【复制链接】之后,链接将复制到剪切板。可在浏览器中进行粘贴打开。

最终实现方法

最终的实现方法很简单,引一个插件,一行代码搞定。这里演示一个简单的 Demo。

  1. 下载 copy-to-clipboard
    npm i copy-to-clipboard --save
  2. 引入 copy 方法,在点击按钮时调用 copy 方法
import copy from 'copy-to-clipboard';
function coppyUrl(url){copy(url);alert('复制成功');
};
function App(){return <button onClick={()=>coppyUrl('https://www.baidu.com/')}><button>
};
export default App;

中间踩坑

刚开始在网上找了各种 js 实现复制链接的办法。要么出现浏览器兼容性,要么主要是针对原生 DOM 操作。在此记录一下。

1. 只兼容 IE 浏览器

效果:

原理:

  1. 使用 window.clipboardData.setData 方法。不过该方法只兼容 IE 浏览器。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><textarea id="input" style="width: 300px; height: 100px">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Maxime expedita corporis culpa voluptates deleniti eveniet voluptatem laborum facere quos fugit, obcaecati corrupti repellat voluptatibus iste quae! Illum sint quibusdam velit?</textarea>    <button type="button"  onClick="copyUrl()">点此复制文本框的内容</button><script language="javascript">function copyUrl() {var input = document.getElementById("input");window.clipboardData.setData("Text", input.value);alert("复制成功!");}</script></body>
</html>

2. 浏览器自带的方法实现原生 DOM 复制

效果:

原理:

  1. 使用文本域或者输入框的 input.select() 方法。
  2. 执行浏览器的 document.execCommand("copy") 命令。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><div><textarea id="input" style="width:300px;height:100px">
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Maxime expedita corporis culpa voluptates deleniti eveniet voluptatem laborum facere quos fugit, obcaecati corrupti repellat voluptatibus iste quae! Illum sint quibusdam velit?</textarea><div><button onclick="copyText()" style="cursor: pointer;">点此复制文本框的内容</button></div></div><script>function copyText() {      var input = document.getElementById("input");//input.value = text; // 修改文本框的内容input.select(); // 选中文本document.execCommand("copy"); // 执行浏览器复制命令alert("复制成功");}</script></body>
</html>

兼容 Firefox 48.0、Chrome 60.0、IE 8 。

3. 使用 clipboard 插件

效果:

原理:

  1. 引入 clipboard 插件。
  2. 在点击元素中,使用 data-clipboard-action 指定操作类型(copy or cut)。使用 data-clipboard-target 指定复制的目标元素。
  3. 实例化 ClipboardJS 对象,参数为点击元素的类名或者id名。
    注意:根据 clipboard 插件的版本不同,有的需要实例化 Clipboard 对象。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><div><textarea id="input" style="width: 300px; height: 100px">
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Maxime expedita corporis culpa voluptates deleniti eveniet voluptatem laborum facere quos fugit, obcaecati corrupti repellat voluptatibus iste quae! Illum sint quibusdam velit?</textarea><div><button id="btn"  data-clipboard-action="copy" data-clipboard-target="#input" style="cursor: pointer">点此复制文本框的内容</button></div></div><script src="./clipboard.js"></script>   <script>//使用 dom 属性实现复制功能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);alert("复制成功");e.clearSelection();});clipboard.on("error", function (e) {console.error("Action:", e.action);console.error("Trigger:", e.trigger);});</script></body>
</html>

React 中实现复制到剪切板功能相关推荐

  1. 打开 Ubuntu 18 中 Vim 的系统剪切板功能

    打开 Ubuntu 18 中 Vim 的系统剪切板功能 文章目录 打开 Ubuntu 18 中 Vim 的系统剪切板功能 1. 查看 Vim 是否支持系统剪切板 2. 开启系统剪切板功能 3. 系统剪 ...

  2. Android 复制到剪切板功能

    Android 复制到剪切板功能-------------- 1.复制到剪切板会使用ClipboardManager,在SDK版本为11前后使用的包不一样.一个是android.text(已弃用),一 ...

  3. vue获取剪切板内容_vue通过clipboard插件实现复制到剪切板功能

    1.在package.json添加依赖"dependencies": { "clipboard": "^2.0.0" } 2.页面引入cli ...

  4. 使用clipboard实现复制到剪切板功能(超详细~~)

    先看看效果: 1.页面中使用 // html <Button type="primary" @click="clickCopy">复制</Bu ...

  5. uniapp 复制到剪切板 四端适配

    记得很早的时候实现过一次,只不过那次是 纯 vue 实现的 h5+,但是想用在 uniapp中 还是不行.有些地方不能用!不过在 App 中的方法还是可以使用的: Vue 复制内容到系统剪切板_唐僧的 ...

  6. Web功能之复制粘贴剪切板

    目录 一.展示 1.代码展示 2.实际效果展示 二.具体实现 简述步骤 三.疑惑与解答 一.展示 1.代码展示 <!DOCTYPE html> <html> <head& ...

  7. html复制文字兼容手机,JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)...

    新学习JavaScript,就碰到这么一个需求,几乎网上的方法都试过了.写出了总结下 使用的方法:clipboard 插件下载地址:https://github.com/zenorocha/clipb ...

  8. html5 js 手机剪切板,JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)...

    新学习JavaScript,就碰到这么一个需求,几乎网上的方法都试过了.写出了总结下 使用的方法:clipboard 插件下载地址:https://github.com/zenorocha/clipb ...

  9. H5 LayaAir实现复制微信号到剪切板功能

    现在微信和QQ可以说普及的非常好了,在做游戏的过程中 与玩家进行沟通的时候,经常会设置客服与玩家进行在线的对接和沟通. 所以,为了简化玩家的操作,在游戏里面经常设置<复制微信号>类似的按钮 ...

  10. android输入法剪切板历史记录,讯飞输入法剪切板功能知多少?

    原标题:讯飞输入法剪切板功能知多少? 复制+粘贴"是日常操作,但批量复制时前次内容就被覆盖,粘贴很不方便:如果一次复制给多个朋友,依然需要来回操作很不省心:有时翻找上一次或者以前的聊天内容, ...

最新文章

  1. Java变量和数据类型
  2. 反函数的导数:理论与应用
  3. Poisson Surface Reconstruction
  4. java中InputStream和OutputStream的使用场景
  5. 垃圾收集器与内存分配策略(五)之垃圾日志与常见参数
  6. matlab 当已知两个矩阵满足分别一定条件时_程序继续执行,MATLAB程序设计基础
  7. 惯性制导精度是多少_美军激光炸弹真实精度性能:炸小卡车,直接从驾驶员车窗钻进去炸...
  8. iOS 项目开发工具JIRA
  9. angular 设置接口调用地址_[译] 关于 Angular 的变化检测,你需要知道的一切
  10. 《JavaScript开发框架权威指南》——1.4 查找、添加和删除Bower包
  11. 加密方式(包括MD5 base64 对称加密 非对称加密简介)
  12. USB转串口,JLINK驱动安装(亲测有效)
  13. 可汗学院教学课程总目录
  14. 重磅 | Stratifyd实力入选《2022中国数据智能产业图谱1.0》
  15. 【牛腩】-母版图片不显示问题
  16. 大三下,我们该做什么?一篇被转万次的日志,你值得一看
  17. 查看oracle关闭重启,oracle 数据库关闭重启
  18. win10隐藏任务栏_如何隐藏或删除Windows 10任务栏图标
  19. [搬运]一百三十四 - TikTok原评论区搬运(机翻)
  20. arduino开关控制RGB三色小灯程序,按一下亮一个颜色,松开熄灭,三种不同颜色,程序代码,以及连线图。

热门文章

  1. 电视端Android TV应用移植开发常见问题QA-Android TV 应用开发
  2. 8080端口号被占用的解决方法
  3. 异步电机参数计算的公式法
  4. react native 更改app名称和图标
  5. 求一堆点中的最大点集合(边界点)
  6. Linux第二章:5.Xshell安装教程、使用Xshell6进行Linux远程登录
  7. linux 更新cuda 驱动程序,记:第一次更新服务器CUDA和GPU驱动
  8. 解析力 (2)空间采样 和 奈奎斯特
  9. 计算机组成原理累加器实验,计算机组成原理实验教学的探讨.doc
  10. 区块链各行业应用案例