vue3:使用:图片生成二维码并复制

实现在 vue3 中根据 url 生成一个二维码码,且可以复制。

注)复制功能 navigator.clipboard.write 只能在安全的localhost 这种安全网络下使用。https中需要添加安全证书,且在域名(例:https://www.baidu.com)这种下即可。

1、安装

注)由于qrcodejs的兼容性问题,需要在vue3中引入qrcodejs2-fix才能正常生成二维码。

npm install qrcodejs2-fix

2、在vue文件中导入模块qrcodejs2-fix

import QRCode from 'qrcodejs2-fix';

3、场景一、生成二维码码、复制(生成的二维码图片)

<template>// 点南生成二维码<e-button type="primary" @click="handleGenerate">点击生成二维码</e-button>// 生成的二维码图片<div id="imgCode"></div>// 复制二维码<e-button type="primary" @click="handleCopyCode">复制</e-button>
</template><script setup>
// 1、生成二维码(id名称, 参数)
function handleGenerate(idName, name) {// 采集二维码:路径const ip = 'https://crm.waihucc.com';const getIPAddress = `${ip}/h5/index.html`; const url = `${getIPAddress}?companyId=80&saleId=${name}`;// 获取二维码码 div 上的 idconst qrCodeElement = document.getElementById(idName);if (qrCodeElement) {qrCodeElement.innerHTML = '';new QRCode(qrCodeElement, {text: url || '',width: 100, // 二维码宽度height: 100, // 二维码高度});}
}// 2、复制生成的二维码(id 名称)
function handleCopyCode(idName) {// 1、获取图片元素const imgElement = document.querySelector(`#${idName} img`);// 2、创建一个新的Image对象const img = new Image();// 3、设置Image对象的src为图片元素的srcimg.src = imgElement.src;// 4、监听图片加载完成事件img.onload = function () {//(1)创建 Canvasconst canvas = document.createElement('canvas');canvas.width = img.width;canvas.height = img.height;const ctx = canvas.getContext('2d');//(2)在Canvas上绘制图片ctx.drawImage(img, 0, 0);//(3)获取 Canvas 内容作为Blobcanvas.toBlob(function (blob) {//(4)使用Clipboard API 把生成对象URL,写入到剪贴板navigator.clipboard.write([new ClipboardItem({ 'image/png': blob })]).then(() => {ElMessage({message: '二维码已复制',type: 'success',});}).catch(() => {console.error('图像复制失败');});});};
}
</script>

 4、场景二、点"复制"按钮,生成二维码,点击"复制"直接复制生成的二维码图片

 

<template>// 复制二维码<e-button type="primary" @click="generateCode">复制</e-button>// 生成的二维码图片<div id="imgCode"></div>
</template><script setup>
// 1、
const generateCode = (url, idName) => {document.getElementById(idName).innerHTML = '';new QRCode(document.getElementById(idName), {text: url || '',});// 获取 Canvas 元素const canvas = document.getElementById(idName).querySelector('canvas');// 将 Canvas 转换为 Data URLconst dataURL = canvas.toDataURL();// 创建一个 Blob 对象const blob = dataURLToBlob(dataURL);// 使用 Clipboard API 复制 Blob 对象到剪贴板navigator.clipboard.write([new ClipboardItem({ 'image/png': blob })]).then(() => {ElMessage({message: '二维码已复制',type: 'success',});}).catch(() => {console.error('图像复制失败');});
};// 2、
const dataURLToBlob = (dataURL) => {const arr = dataURL.split(',');const mime = arr[0].match(/:(.*?);/)[1];const bstr = atob(arr[1]);let n = bstr.length;const u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new Blob([u8arr], { type: mime });
};
</script>

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

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

相关文章

微服务通信[HTTP|RPC同步通信、MQ异步通信]

概念 A服务调用B服务,B服务调C服务,C服务调D服务,即微服务之间的通信(也可以叫微服务之间的调用) HTTP同步通信 一种轻量级的通信协议,常用于在不同的微服务之间进行通信,也是最简单的通信方式使用REST ful为开发规范&#xff0c;将服务对外暴露的HTTP调用方式为REST API(如GET…

大数据项目实战(安装Hive)

一&#xff0c;搭建大数据集群环境 1.3 安装Hive 1.3.1 Hive的安装 1.安装MySQL服务 1&#xff09;检查是否安装MySQL&#xff0c;如安装将其卸载。卸载命令 rpm -qa | grep mysql 2&#xff09;搜索MySQL文件夹&#xff0c;如存在则删除 find / -name mysql rm -rf /etc/s…

【ELK日志收集系统】

目录 一、概述 1.作用 2.为什么使用&#xff1f; 二、组件 1.elasticsearch 1.1 作用 1.2 特点 2.logstash 2.1 作用 2.2 工作过程 2.3 INPUT 2.4 FILETER 2.5 OUTPUTS 3.kibana 三、架构类型 1.ELK 2.ELKK 3.ELFK 4.ELFKK 四、案例 - 构建ELK集群 1.环境…

【数学建模竞赛】Matlab逻辑规则,结构基础及函数

逻辑基础 逻辑变量 在Matlab中&#xff0c;逻辑变量是一种特殊类型的变量&#xff0c;用于表示逻辑值。逻辑变量只有两个可能的值&#xff1a;true&#xff08;真&#xff09;和false&#xff08;假&#xff09;。在Matlab中&#xff0c;我们可以使用0和1来表示逻辑变量的值。…

存储成本降低85%,携程历史库场景的降本实践

携程&#xff0c;一家中国领先的在线票务服务公司&#xff0c;从 1999 年创立至今&#xff0c;数据库系统历经三次替换。在移动互联网时代&#xff0c;面对云计算卷积而来的海量数据&#xff0c;携程通过新的数据库方案实现存储成本降低 85% 左右&#xff0c;性能提升数倍。本文…

取证工具prodiscover的基本操作

前言提醒 取证工具ProDiscover在网上讲解操作的文章实在太少&#xff0c;一是prodiscover是用于磁盘取证的工具&#xff0c;本身比较小众比不上其他的编程软件能用到的地方多&#xff0c;二是这个工具是用来恢复提取磁盘中被删除的文件&#xff0c;是比较隐晦的软件。 需要注…

【洛谷】P3853 路标设置

原题链接&#xff1a;https://www.luogu.com.cn/problem/P3853 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 整体思路&#xff1a;二分答案 由题意知&#xff0c;公路上相邻路标的最大距离定义为该公路的“空旷指数”。在公路上增设一些路标&…

ssm+vue医院医患管理系统源码和论文

ssmvue医院医患管理系统源码和论文077 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm vue.js 摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已…

车联网仿真工具Veins安装指南(基于官方文档)

Veins安装指南 官方文档&#xff1a; tutorial 直接选择最easy的way&#xff1a; 下载一个虚拟机&#xff1a;VMware Workstation Player 下载即可。这个普通版是免费的&#xff0c;pro版正版是要收费的&#xff0c;可以找一些其他的方法下载pro版本&#xff0c;可以同时开…

Linux整合seata

1、到官网下载seata&#xff0c;这里以ZIP为例 2、使用远程工具上传ZIP包 3、通过命令解压 unzip seata-server-1.7.0.zip4、修改配置文件、新建表&#xff0c;参考我之前的文章 分布式系统的多数据库&#xff0c;实现分布式事务回滚&#xff08;1.7.0 seata整合2.0.4nacos…

PHP NBA球迷俱乐部系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP NBA球迷俱乐部系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 基于PHP的NBA球迷俱乐部 二、功能介绍 1、前台主要功能&#xff1a; 系统首页 网站介…

PYTHON知识点学习-函数调用中returnprint

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是Aileen★。希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由 Aileen_0v0★ 原创 CSDN首发&#x1f412; 如需转载还请通知⚠ &am…

亚马逊庭院类目或迎来显著增长;倩碧使用TikTok全新搜索广告功能

夏季即将结束&#xff0c;但Jungle Scout Cobalt数据显示&#xff0c;亚马逊的Patio, Lawn & Garden类目仍将迎来显著的季节性增木 除了夏季销售的飙升&#xff0c;Generators & Portable Power发电机和便携式电源子类别的销售一般会在初秋和假日季节会迎来大幅增长&a…

事务的总结

数据库事务 数据库事务是一个被视为单一的工作单元的操作序列。这些操作应该要么完整地执行&#xff0c;要么完全不执行。事务管理是一个重要组成部分&#xff0c;RDBMS 面向企业应用程序&#xff0c;以确保数据完整性和一致性。事务的概念可以描述为具有以下四个关键属性描述…

Java“牵手”京东店铺所有商品API接口数据,通过店铺ID获取整店商品详情数据,京东店铺所有商品API申请指南

京东平台店铺所有商品数据接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取京东整店的商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片、价格信息等详细信息 。 获取店铺所有商品接口API是一种用于获取电商平台上商品详…

Angular安全专辑之三 —— 授权绕过,利用漏洞控制管理员账户

这篇文章是针对实际项目中所出现的问题所做的一个总结。简单来说&#xff0c;就是授权绕过问题&#xff0c;管理员帐户被错误的接管。 详细情况是这样的&#xff0c;我们的项目中通常都会有用户身份验证功能&#xff0c;不同的用户拥有不同的权限。相对来说管理员账户所对应的…

(数字图像处理MATLAB+Python)第十一章图像描述与分析-第一节、二节:图像描述概述和特征点

文章目录 一&#xff1a;图像描述概述&#xff08;1&#xff09;图像描述&#xff08;2&#xff09;描述子 二&#xff1a;特征点&#xff08;1&#xff09;Moravec角点检测A&#xff1a;原理B&#xff1a;程序 &#xff08;2&#xff09;Harris角点检测A&#xff1a;原理B&…

设计模式入门(二)观察者模式

设计模式入门 本系列所有内容参考自《HeadFirst设计模式》。因为书中的代码是采用java语言写的&#xff0c;博主这里用C语言改写。 这里采用讲故事的方式进行讲解。若有错误之处&#xff0c;非常欢迎大家指导。 设计模式&#xff1a;模式不是代码&#xff0c;而针对设计问题的…

SpringMVC-学习笔记

文章目录 1.概述1.1 SpringMVC快速入门 2. 请求2.1 加载控制2.2 请求的映射路径2.3 get和post请求发送2.4 五种请求参数种类2.5 传递JSON数据2.6 日期类型参数传递 3.响应3.1 响应格式 4.REST风格4.1 介绍4.2 RESTful快速入门4.3 简化操作 1.概述 SpringMVC是一个基于Java的Web…

七、性能测试之内存分析

性能测试之内存分析与实战 一、内存知识1、理解&#xff1a;2、内存的组成&#xff1a;内存地址、存储单元3、内存---树形结构1、链表2、二叉树 4、数据结构 二、内存使用1、典型案例&#xff1a;JVM&#xff08;java虚拟机&#xff09;包含程序计数器&#xff0c;java虚拟机栈…