Vue中进行粘贴板粘贴数据(图片、文字等)

2024-05-12 09:28

本文主要是介绍Vue中进行粘贴板粘贴数据(图片、文字等),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在页面中如果需要进行粘贴数据,那么就要读取系统粘贴板clipboard,通过此Api来进行粘贴板数据的操作。

目录:

  • 一.封装相关函数
    • 1.示例代码:
    • 2.代码解释:
  • 二.页面中进行粘贴
    • 1.代码示例:
    • 2.代码解释:
  • 三.运行结果

一.封装相关函数

1.示例代码:

let Instance = null;class NavtiveBridge {constructor() {// 判断环境this.platform = (navigator.userAgent.match(/(Electron)/i) || (/macintosh|mac os x/i.test(navigator.userAgent))) && !!(window.ipcRenderer && window.shell && window.remote)//根据环境选择相关this.clipboard = this.platform ? window.clipboard : window.navigator.clipboardthis.clipboard.readAvailableFormats = ()=>{if(this.platform){return Promise.resolve(window.clipboard.availableFormats())}else{return new Promise(async(resolve, reject)=>{try {let clipboardItem = await window.navigator.clipboard.read()resolve(clipboardItem[0] ? clipboardItem[0].types : [])} catch (error) {reject(error)}})}}this.setClipboardWrite()}//写入剪切板setClipboardWrite(){if(!this.platform){const originalWriteText = navigator.clipboard.writeText;this.clipboard.writeText = async (text)=>{// 是否授权const { state } = await navigator.permissions.query({ name: "clipboard-write", });if(state === 'granted'){return originalWriteText.apply(navigator.clipboard,[text])}else{return Promise.resolve()}}}else{const originalWriteText = window.clipboard.writeText;this.clipboard.writeText = async (text)=>{originalWriteText.apply(window.clipboard,[text])return Promise.resolve()}}}// 读取复制的值async readText(){if(!this.platform){return  await this.clipboard.readAvailableFormats()}else{return await this.clipboard.read()[0].types}}
}
if (!Instance) {Instance = new NavtiveBridge();
}
//导出
export default Instance;

2.代码解释:

  1. 首先定义了一个变量 Instance,用于存储 NavtiveBridge 类的实例。如果 Instance 为空,则创建一个新的 NavtiveBridge 实例并赋值给 Instance,以保证只有一个 NavtiveBridge 实例存在。

  2. NavtiveBridge 类的构造函数通过检测用户代理字符串来确定当前运行环境是否支持本地原生功能(如 Electron 桌面应用或者 Mac 上的 Web 应用)。如果支持本地原生功能,则使用本地原生的剪贴板 API,否则使用 Web 标准的剪贴板 API。在构造函数中,还调用了 setClipboardWrite() 方法来设置写入剪贴板的方法。

  3. setClipboardWrite() 方法用于设置写入剪贴板的方法。如果运行环境支持本地原生功能,则直接调用本地原生的写入剪贴板方法;否则使用 Web 标准的写入剪贴板方法,并在写入前检查权限。

  4. readText() 方法用于读取剪贴板中的文本。如果支持本地原生功能,则直接调用本地原生的读取剪贴板方法;否则使用 Web 标准的读取剪贴板方法,并返回剪贴板中的文本。

最后通过 export defaultInstance 导出,以便其他模块可以引入并使用该实例。

二.页面中进行粘贴

1.代码示例:

<template><div class="OnePageDemo"><el-button type="primary" @click="pasetText">粘贴</el-button><p>这是复制图片数据:</p><img :src="pasteUrl" style="width: 500px;height: 500px;" alt="" srcset=""></div>
</template><script>
// 导入上述封装的js
import demo from './demo'
export default {name: 'OnePageDemo',data() {return {platform: "",  //平台环境clipboard: "", //粘贴板pasteUrl: ""  //链接};},mounted() {},methods: {async pasetText() {let clipboard = demo.clipboardlet clipboardType = await clipboard.readAvailableFormats()let readText = await clipboard.readText()// 输入框粘贴let excelArr = ['text/plain', "text/html", "text/rtf", "image/png"]   //excel格式let num = 0excelArr.forEach(e => {!clipboardType.includes(e) && (num += 1)})if (clipboardType.includes("image/png")) {const clipboardItems = await clipboard.read()for (const clipboardItem of clipboardItems) {for (const type of clipboardItem.types) {// 筛选图片类型的文件const blob = await clipboardItem.getType(type)this.pasteImg(blob)}}}else{console.log(readText,'这是文本数据');}},pasteImg(blob) {let self = this;// blob 就是从剪切板获得的文件 可以进行上传或其他操作var imgs = new Image();var reader = new FileReader();reader.onload = (function (aImg) {return function (e) {self.pasteUrl = e.target.result;};})(imgs);reader.readAsDataURL(blob);}}
}
</script>

2.代码解释:

  1. pasetText 方法是一个点击按钮后触发的方法,用于从剪贴板中读取数据,并根据数据类型进行处理。如果剪贴板中包含图片数据,则调用 pasteImg 方法进行处理;如果剪贴板中是文本数据,则直接打印出来。
  2. pasteImg 方法用于处理粘贴的图片数据,它接受一个 blob 参数,该参数是从剪贴板获得的文件。在方法内部,创建一个新的 Image 对象和一个 FileReader 对象,使用 FileReader 对象将 blob 转换成 Data URL,然后将 Data URL 赋值给 pasteUrl 属性,以在页面上展示图片。

三.运行结果

在这里插入图片描述

这篇关于Vue中进行粘贴板粘贴数据(图片、文字等)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/982239

相关文章

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处