当前位置: 首页 > news >正文

vue 如何实现粘贴复制功能

目录

1. 安装第三方插件方法(不推荐)

2. 浏览器自带Document.execCommand()复制方法(不推荐)

3. Clipboard.writeText方法(强烈推荐)

4.vue-clipboard3


项目中如果实现粘贴复制功能,目前市面上共有四种方法,均有利有弊,大家可以根据自己项目实际情况依次选择。本节将都会对这四种方法做详细阐述,重点推荐第四种方法。

1. 安装第三方插件方法(不推荐)

这种方法兼容性很好,如果项目只使用了一次,不建议使用。

安装插件

npm install clipboard --save

引入插件

import Clipboard from 'clipboard';

项目中使用

直接在元素上添加 data-clipboard-text

适合要复制的内容是固定字符串。

事实是,你甚至不需要另一个元素来复制其内容。你只需在触发器元素中包含 data-clipboard-text 属性即可。

在某些情况下,你希望显示一些用户反馈或捕获复制/剪切操作后所选择的内容。

这就是我们触发自定义事件(例如 success 和 error)的原因,以便你监听并实现自定义逻辑。

<template><spanclass="copy"data-clipboard-text="这是要复制的内容"@click="onCopy"><i class="iconfont iconcopy"></i><span>点击复制</span></span>
</template><script setup>
import Clipboard from 'clipboard'const onCopy = () => {const clipboard = new Clipboard('.copy')clipboard.on('success', e => {console.log('复制成功')clipboard.destroy()})clipboard.on('error', e => {console.log('该浏览器不支持自动复制', e)clipboard.destroy()})
}
</script>

制动态内容(推荐)

适合要复制的内容是变量。

如果你不想修改 HTML,可以使用非常方便的命令式 API。你需要做的就是声明一个函数,执行操作,然后返回一个值。

例如,如果你想动态设置 text,则返回一个字符串。

new ClipboardJS('.btn', {text: function(trigger) {return trigger.getAttribute('aria-label');}
});

<template><span class="copy" @click="onCopy"><i class="iconfont iconcopy"></i><span>点击复制</span></span>
</template><script setup>
import Clipboard from 'clipboard'const textToCopy = '这是一段动态文本'const onCopy = (e) => {const clipboard = new Clipboard('.copy', {text: () => textToCopy // 👈 指定要复制的文本})clipboard.on('success', e => {console.log('复制成功')clipboard.destroy()})clipboard.on('error', e => {console.log('该浏览器不支持自动复制', e)clipboard.destroy()})
}
</script>

2. 浏览器自带Document.execCommand()复制方法(不推荐)

虽然这个方法不需要安装插件,但是官网申明如下:

微信图片_20220329133434.png

const input = document.createElement('input')
input.value = '要复制的文字'
document.body.appendChild(input)
input.select()
document.execCommand('copy')
document.body.removeChild(input)
  • 这是早期操作剪贴板的方式。

  • 它通过让浏览器「选中」一个文本框内容,然后调用 execCommand('copy') 来完成复制。

  • 复制操作其实是「模拟用户复制」的行为。

3. Clipboard.writeText方法(强烈推荐)

说明

Clipboard 接口的 writeText()  方法可以写入特定字符串到操作系统的剪切板。会返回一个Promise ,一旦剪贴板的内容被更新,它就会被解析。如果调用者没有写入剪贴板的权限,则拒绝写入剪切板(reject)

写入文本至操作系统剪贴板。返回一个在文本已被完全写入剪贴板后兑现的

await navigator.clipboard.writeText('要复制的文字')
console.log('复制成功')

兼容代码

<template><span class="copy" @click="onCopy"><i class="iconfont iconcopy"></i><span>点击复制</span></span>
</template><script setup>const textToCopy = '6666'
const onCopy = async () => {try {// 要复制的内容(可改成动态变量)// 使用现代异步 APIawait navigator.clipboard.writeText(textToCopy)console.log('复制成功')} catch (err) {console.error('复制失败:', err)// 某些环境(比如 HTTP 或非安全上下文)不支持 navigator.clipboard// 这里可做回退方案:fallbackCopy(textToCopy)}
}// 回退方案(仅在旧浏览器中执行)
function fallbackCopy(text) {const input = document.createElement('input')input.value = textdocument.body.appendChild(input)input.select()document.execCommand('copy')document.body.removeChild(input)console.log('已通过旧方式复制')
}
</script>

4.vue-clipboard3

使用 clipboard.js 轻松复制到 Vue 3(composition-api)中的剪贴板📋

安装

npm install --save vue-clipboard3

使用

<template><span class="copy" @click="copy"><i class="iconfont iconcopy"></i><span>点击复制</span></span>
</template><script setup>
import useClipboard from 'vue-clipboard3'
const { toClipboard } = useClipboard()const copy = async () => {try {await toClipboard("8888888")console.log('Copied to clipboard')} catch (e) {console.error(e)}}</script>

API

useClipboard(options: Options)
interface Options {/** Fixes IE by appending element to body. Defaults to true. */appendToBody: boolean
}

返回具有单个键的对象:toClipboard

toClipboard(text: string, container?: HTMLElement)

要求您至少传入一个字符串参数。这是要复制到剪贴板的文本。第二个可选参数是一个 HTML 元素,在使用 clipboard.js 时,它将在内部用作容器。

http://www.dtcms.com/a/521499.html

相关文章:

  • 企业信息化建设如何帮助客户理解网站流量已经有了域名怎么做网站
  • 华大基因 建设网站wordpress点击折叠展开内容
  • 永康网站建设的公司苏州网站建设丨好先生科技
  • 学习笔记 | 链路预测
  • I. Imagined Holly——The 2025 ICPC Asia Xi‘an Regional Contest(2025ICPC区域赛西安站)
  • 【JUnit实战3_09】第五章:软件测试的基本原则简介
  • 安徽飞亚建设网站潍坊知名网站建设最新报价
  • 凡科建站免费版可以做什么wordpress 上传pdf
  • 肥乡专业做网站wordpress模板汉化
  • Linux学习笔记及常用运维命令
  • 【Android】横竖屏切换时生命周期变化
  • 购物网站建设 成都那家公司做网站比较好
  • 网站开发合同注意网站怎么搭建
  • SpringBoot-Web开发之嵌入式容器
  • 网站整站建设廊坊企业网站服务
  • 做门户网站的公司有哪些论坛做视频网站有哪些
  • OBS弹幕助手下载,OBS弹幕助手安装使用教程,OBS语音读弹幕,OBS语音助手下载地址
  • 百度网站推广外包织梦的网站收录不好
  • 欢迎访问中国建设银行网站个人客户鹤壁专业做网站多少钱
  • wordpress 添加图片水印seo网络优化是做什么的
  • Spring Boot Actuator:打造高效监控系统
  • 凡客衬衫官方网站东莞五金网站建设
  • 怎么找网站建设宁夏交通厅建设局网站
  • 使用 n8n 构建自动化科技新闻速览工作流:从 RSS 到 AI 摘要生成与文件存储
  • mysy配置C++
  • 做html网站模板咸阳市城市建设管理局网站
  • 做英文网站有哪些网站建设必须买主机吗
  • 深圳做小程序网站开发服装设计效果图
  • 公司网站首页图片素材台州网站建设公司
  • 项目——基于C/S架构的预约系统平台 (1)