JS 方法实现复制粘贴

news2024/11/25 22:24:47

背景

以前我们一涉及到复制粘贴功能,实现思路一般都是:

  • 创建一个 textarea 标签

  • 让这个 textarea 不可见(定位)

  • 给这个 textarea 赋值

  • 把这个 textarea 塞到页面中

  • 调用 textarea 的 select 方法

  • 调用 document.execCommand('copy')

  • 删除 textarea 标签

代码如下

const legacyCopy = (value: string) => {
    const ta = document.createElement('textarea');
    ta.value = value ?? '';
    ta.style.position = 'absolute';
    ta.style.opacity = '0';
    document.body.appendChild(ta);
    ta.select();
    document.execCommand('copy');
    ta.remove();
  };

navigation.clipboard

上面说的是以前的方式,前几天在看 vueuse 源码的时候,发现了一个复制粘贴的 api,是 navigation 上的 clipboard

writeText

navigation.clipboard.writeText 是一个异步方法,用来将特定的值复制起来,方便你去别的地方粘贴,具体的用法如下

<body>
  <div>
    <button id="btn">复制</button>
    <input id="input" />
  </div>
  <script>
    const btn = document.getElementById('btn')
    const input = document.getElementById('input')
    let value = ''

    btn.onclick = async () => {
      await navigator.clipboard.writeText(value);
    }
    input.oninput = (e) => {
      value = e.target.value
    }
  </script>
</body>

就能实现复制,并且可以 ctrl + v 进行粘贴

readText

navigation.clipboard.writeText 是一个异步方法,用来粘贴你刚刚复制的值

<body>
  <div>
    <button id="copy">复制</button>
    <input id="input" />
  </div>
  <div>
    <button id="paste">粘贴</button>
    <span id="span"></span>
  </div>
  <script>
    const copy = document.getElementById('copy')
    const paste = document.getElementById('paste')
    const input = document.getElementById('input')
    const span = document.getElementById('span')
    let value = ''

    copy.onclick = async () => {
      await navigator.clipboard.writeText(value);
    }
    paste.onclick = async () => {
      span.innerHTML = await navigator.clipboard.readText()
    }
    input.oninput = (e) => {
      value = e.target.value
    }
  </script>
</body>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/978821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java逻辑控制

目录 一、顺序结构 二、分支结构 1、if语句 &#xff08;1&#xff09; 语法格式1​编辑 &#xff08;2&#xff09;语法格式2​编辑 &#xff08;3&#xff09;语法格式3 2、switch 语句 三、循环结构 1、while循环 2、break 3、continue 4、for 循环 5、do whil…

Pycharm通用设置个性化设置

Pycharm通用设置&个性化设置 通用设置取消打开Pycharm自动进入项目开启【Ctrl鼠标滑轮】放大缩小字体 个性化设置设置彩虹括号 通用设置 取消打开Pycharm自动进入项目 选择选择菜单【File】>【Settings】进入设置页面选择【Appearance & Behavior】>【System S…

dantax参数调优

dantax参数调优 1.speed调优 可能会导致数据倾斜 处理的速度不同&#xff0c;可能会导致job非常慢 举例子&#xff0c;比如总限速是每秒100条record&#xff0c;其中第一个channel速度是每秒99条record&#xff0c;第二个channel是每秒1条record&#xff0c;加起来是每条100条…

Helm Deploy Online Rancher Demo

文章目录 简介预备条件在线安装 Rancher Helm Chart选择 SSL 配置安装 cert-managerHelm 安装 Rancher验证 Rancher Server 是否部署成功 简介 Rancher 是一个开源的企业级全栈化容器部署及管理平台。已有超过 1900 万次下载&#xff0c;4000 生产环境的应用。 简单的说&…

医院如何选择跨网文件交换产品,提升业务效率?

我国医院根据国家信息安全相关法规要求&#xff0c;大多都采用网闸等隔离手段&#xff0c;将网络隔离为内网和外网&#xff0c;但网络隔离后&#xff0c;医院仍需要进行内外网间的文件交换&#xff0c;如患者的检测报告、学术研究等资料。而医院内的不同科室都存在内外网文件交…

被动元件库存“见底”,或迎涨价潮? | 百能云芯

近日&#xff0c;有消息称被动元件可能会涨价&#xff0c;这促使了被动元件相关股票的全面上涨。国内相关供应链表示&#xff0c;虽然目前没有涨价的条件&#xff0c;但经过长时间的库存消化&#xff0c;各种应用的库存几乎已经清空&#xff0c;只等待终端需求的回升。 自2021年…

软件测试/测试开发丨测试用例自动录入 学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27139 测试用例自动录入 测试用例自动录入的价值 省略人工同步的步骤&#xff0c;节省时间 兼容代码版本的自动化测试用例 用例的执行与调度统一化管理…

STM32--蓝牙

本文主要介绍基于STM32F103C8T6和蓝牙模块实现的交互控制 简介 蓝牙&#xff08;Bluetooth&#xff09;是一种用于无线通信的技术标准&#xff0c;允许设备在短距离内进行数据交换和通信。它是由爱立信&#xff08;Ericsson&#xff09;公司在1994年推出的&#xff0c;以取代…

【前端打怪升级日志之CSS篇】position定位

学习链接&#xff1a;阮一峰CSS定位详解 学习总结&#xff1a; 学习应用&#xff1a;待补充。。。

阿里云再推视频生成大模型,2分钟生成高清电影级效果视频

近日&#xff0c;阿里云推出全新视频生成大模型I2VGen-XL&#xff0c;并在魔搭社区开放体验&#xff0c;用户上传一张图片后2分钟左右即可生成一段1280*720的高分辨率视频&#xff0c;该模型研发负责人表示&#xff0c;未来将进一步实现2K超清效果&#xff0c;可应用于短视频内…

懂点心理学 - 踢猫效应

懂点心理学&#xff0c;生活工作两不误&#xff5e; 什么是踢猫效应 某公司董事长为了重整公司事务&#xff0c;许诺自己将早到晚归。有一次&#xff0c;他在家看报太入迷以至于忘记了时间&#xff0c;为了不迟到&#xff0c;他在公路上超速驾驶&#xff0c;结果被警察开了罚单…

Vue + Element UI 实现权限管理系统 前端篇(十四):菜单功能实现菜

Vue Element UI 实现权限管理系统 前端篇&#xff08;十四&#xff09;&#xff1a;菜单功能实现 菜单功能实现 菜单接口封装 菜单管理是一个对菜单树结构的增删改查操作。 提供一个菜单查询接口&#xff0c;查询整颗菜单树形结构。 http/modules/menu.js 添加 findMenu…

微信公众号开发:Vue3+Pinia

步骤一&#xff1a;绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 步骤二&#xff1a;引入JS文件 在需要调用JS接口 &#xff1a;http://res.wx.qq.com/open/js/jweixin-1.6.0.js npm install weixin-js-sdk 这里报错了。 //…

语音识别数据的采集方法:基本流程数据类型

“人工智能是一种模仿人类功能的产品。数据采集的方法需要针对特定的场景需求。”—–Mark Brayan (澳鹏CEO) 我们一直说&#xff0c;对于一个高质量的人工智能产品离不开高质量的训练数据。对于不同的人工智能我们需要不同的数据对其训练。要采集正确的数据去训练特定的模型才…

float浮动布局大战position定位布局

华子目录 布局方式普通文档流布局浮动布局&#xff08;浮动主要针对与black&#xff0c;inline元素&#xff09;float属性浮动用途浮动元素父级高度塌陷 position属性定位篇相对定位&#xff08;relative为属性值&#xff0c;配合left属性&#xff0c;和top属性使用&#xff09…

快速理解DDD领域驱动设计架构思想-基础篇 | 京东物流技术团队

1 前言 本文与大家一起学习并介绍领域驱动设计(Domain Drive Design) 简称DDD&#xff0c;以及为什么我们需要领域驱动设计&#xff0c;它有哪些优缺点&#xff0c;尽量用一些通俗易懂文字来描述讲解领域驱动设计&#xff0c;本篇并不会从深层大论述讲解落地实现&#xff0c;这…

抄底抄在半山腰?散户如何摆脱追涨杀跌的诅咒?【邢不行】

你第一次炒股的经历是不是这样的&#xff1a; 你有一个朋友甚至是群友&#xff0c;他说在XX股票上大赚了一笔&#xff0c;你听后是既羡慕又不服。 于是你下载了炒股软件&#xff0c;看了眼这只股票&#xff0c;有点心动。但是由于没有交易经验&#xff0c;股价又确实涨了不少…

【实战-06】正确设置flink参数,彻底站起来

参数宝典 如何正确设置参数flink Table模式下的参数Table 模式下参数类相关DataStream 模式下怎么设置参数&#xff1f;总结 如何正确设置参数 很多人在应用flink DataStream 或者是Flinksql 的时候对于一些参数设置知道的不是很清晰&#xff0c;本文带领大家彻底搞定这一块。…

企业微信自建应用开发流程

开发需知 1、企业微信后台管理&#xff08;不是小程序管理后台&#xff09;&#xff1a;企业微信 2、企业微信开发者文档&#xff08;不是小程序文档&#xff09;&#xff1a;概述 - 接口文档 - 企业微信开发者中心 3、开发应用的类型&#xff1a;根据开发应用类型选择文档。…

GitHub个人访问凭证在哪看

要查看 GitHub 个人访问凭证&#xff08;Personal Access Token&#xff09;&#xff0c;请按照以下步骤进行操作&#xff1a; 登录到你的 GitHub 帐户。点击右上角的头像&#xff0c;然后选择 “Settings”&#xff08;设置&#xff09;。在左侧导航栏中&#xff0c;选择 “D…