前情提要

有这样一个需求:每次重复选过滤条件太麻烦啦,需要一个可以复制过滤条件的功能!过滤条件类似下图。

主要步骤

  • 第一步:复制工具的选取。这里我选用的是原生的Document.execCommand()方法,该方法允许运行命令来操纵可编辑内容区域的元素。详情可查看MDN。

  • 第二步:设计一个按钮,当click这个按钮的时候,执行handleCopy()方法。

    • this.viewValue:存放过滤条件的值;
    • 为什么要新建一个input元素:由于Document.execCommand()方法是用来操纵可编辑内容区域的元素,而这里的过滤条件明显不是,故我们要借用input元素;
    • input.setSelectionRange(0, -1):(0,-1) 代表全选

      以下引用于MDN:
      HTMLInputElement.setSelectionRange 方法可以从一个被 focused 的 元素中选中特定范围的内容。

    <button @click="handleCopy"></button>// js
    handleCopy () {if (this.viewValue) {const input = document.createElement('input');let copyValue = JSON.stringify(this.viewValue);input.setAttribute('readonly', 'readonly');input.setAttribute('value', copyValue);document.body.appendChild(input);input.focus();input.setSelectionRange(0, -1);if (document.execCommand('copy')) {document.execCommand('copy');this.$Notify.success('复制成功!'); // 只是一个提示}document.body.removeChild(input);}
    }
    

    这样复制就可以实现复制啦,此时ctrl+v可以看到我们复制的this.viewValue的内容。

  • 第三步:获取粘贴板的内容。
    上述代码实现了过滤条件的复制,但是直接ctrl+v又没法替换过滤条件。所以,我们需要监听粘贴(paste)事件,在该事件中,将粘贴板中的内容替换到过滤条件中。

    // mounted钩子中
    document.addEventListener('paste', (event) => {// 用户打开了过滤条件窗口的话,执行。所以这里根据实际场景进行判断if (...) {// 获取粘贴板的内容let pasteValue = (event.clipboardData || window.clipboardData).getData('text');// 如果pasteValue符合过滤条件格式的话,执行。总不能用户复制了啥我们都执行吧,所以也根据实际场景做判断if (...) {// 节流,规定时间内,只执行一次。let nowTime = new Date();if (!this.lastPasteTime || nowTime - this.lastPasteTime > 5000) {// 复制的时候我们做了stringy处理,所以这里要转换回原有格式。pasteValue = JSON.parse(pasteValue);// 友好一点,提醒一下用户this.$Modal.confirm({title: '警告',content: '您正在进行的粘贴操作将覆盖现有条件,确认要继续吗?',onOk: () => {this.viewValue = pasteValue;},modalProps: {'confirm-text': '粘贴'}});this.lastPasteTime = nowTime;}// 如果当前聚焦了可编辑元素,那么我们复制的内容会被粘贴到该元素中,在不希望发生这样的情况的时候,我们需要阻止默认事件event.preventDefault();}}});
    

    总结

    到这里,点击按钮进行复制,以及获取并处理粘贴板内容的功能就实现了。今天的分享就到这里,如果有错误的地方或者处理不够好的地方欢迎提出来讨论讨论!

更新于2021年1月18日

无意中看到mdn上说到此特性被废弃,所以最好不用此特性来实现复制功能了。

【js】vue项目中实现点击复制过滤条件,获取并处理粘贴板内容相关推荐

  1. node.js/VUE项目中导出excel表格的多种实现方法(D2admin适用)

    方法一.vue+js-xlsx 1.vue项目内安装两个依赖:xlsx.file-saver  npm install xlsx --save  npm install file-saver --sa ...

  2. 解决vue项目中重复点击导航路由报错

    vue版本 "vue": "^2.6.11", 主要代码 //重复点击导航路由报错 const originalPush = VueRouter.prototy ...

  3. 在vue项目中千分位展示输入金额,获取金额千分位,金额大写的方法

    实现效果: 在用户输入完成input失焦的时候,input文本框中显示的是千分位格式的金额:在用户再次聚焦的input文本框时,文本框中展示的是正常的金额值,用户可以修改金额,失焦的时候再次千分位展示 ...

  4. 保姆级教程:js前端接入科大讯飞语音评测,实现朗读打分,vue对接科大讯飞语音评测,还可以实现句子逐词分析对错以及打分,将demo接入vue项目中

    需求说明:实现一个点击录制英文句子朗读,然后调用科大讯飞接口分析朗读准确度,并逐词分析朗读正确性. 步骤一.下载运行demo 首先附上科大讯飞语音评测流式版的文档链接:链接在此 然后在文档里找到dem ...

  5. Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能

    Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能 需求:在pdf中鼠标滑动选中一段文字,将选中文字展示到input框中(pdf在iframe中) 完成效果: 关于pdf的引用:我是直接 ...

  6. vue项目中使用flv.js实时播放 断流重连 关闭断流开发心得

    第一次碰这个东西肯定会碰壁的,问百度人都问傻了(关键还骗人),其中心酸不必多描述,只为成长 后来项目更新采用的是EasyPlayer插件 文章地址: VUE项目中优雅使用EasyPlayer 后端是流 ...

  7. Vue项目判断鼠标点击事件的左键、中键(滚轮)或右键

    Vue项目判断鼠标点击事件的左键.中键(滚轮)或右键 去掉特定区域的右键点击事件 在需要去掉右键点击事件的区域最外层div标签中添加@contextmenu.prevent属性 <templat ...

  8. 如何在VUE项目中添加使用LivePlayer.js直播点播H5免费播放器

    在VUE项目中添加使用LivePlayer.js直播点播H5免费播放器 1.复制依赖文件 1.1 示例 通过 webpack 插件自动复制依赖 1.1.1.编辑你的 webpack.config.js ...

  9. 在vue项目中使用高德地图JS API

    在vue项目中使用高德地图JS API,而不是amap依赖包~ 一. 必做的准备工作 注册账号并申请key 首先,注册开发者账号,成为高德开放平台开发者 登陆之后,在进入「应用管理」 页面「创建新应用 ...

最新文章

  1. [脑海成像]科学家利用动态电极绕过眼睛直接刺激大脑,在盲人脑海画出字母
  2. 网站打不开 换服务器,【图】网站更换服务器打不开—深圳天下信息网
  3. react 中渲染html_如何在React中识别和解决浪费的渲染
  4. 微博安全是一个系统问题包括服务器安全,应用安全开发注意事项
  5. IOS开发中的弹框综述
  6. 【产品体验】echo回声
  7. java设计模式2--工厂模式
  8. Java LRU的实现
  9. JAVA常见异常解析
  10. vmware(鼠标移出移入)反复触发numlock问题
  11. 数据导入与预处理-第6章-04pandas综合案例
  12. 在图形用户登录界面输入正确用户名与密码后,闪了一下(即将要登录进去那一刹那),它NND给我蹦出来了!
  13. 山下英子(日)《断舍离》读书笔记
  14. 【Hadoop实训】统计文件中所有单词的平均长度
  15. 常见的注册表修改大全
  16. java实现商品sku_商品SKU功能设计与优化
  17. 性能优化-Tomcat调优
  18. 租用稳定的网通服务器,网通租用服务器
  19. C语言程序设计编程题[一](山西大学876)
  20. 爱莫科技线下营销智能“四部曲”,推进快消品行业数智化创新

热门文章

  1. iqooneo3 如何不用vivo账号下载外部应用_iQOO Neo3上手体验:软硬件结合的极致游戏体验,真香旗舰无疑...
  2. MySQL 数据库(包括基础和进阶CURD、事务和索引)
  3. 解读 Centralized Feature Pyramid for Object Detection
  4. 如何兼容IE4:Web浏览器兼容性浅谈
  5. Google Guice使用入门(转)
  6. 手把手让你实现开源企业级web高并发解决方案
  7. wps去掉列的重复记录
  8. 前端资源大杂烩(插件、工具、教程)
  9. python学习-Dya13-函数
  10. big_screen,一款超强大的Python 可视化大屏!