vue 畫二維碼及長按保存

需求

想要做如下圖的二維碼帶文字,且能夠長按保存
在這里插入圖片描述

前期準備

  1. 一個canvas
  2. 安裝qrcode(命令:npm i qrcode)

畫二維碼及文字

初始化畫布

<template><div><canvas ref="canvas" width="300" height="400"></canvas></div>
</template><script setup>
import { ref, onMounted } from 'vue';
const canvas = ref(null);
onMounted(() => {// 初始化畫布let ctx = canvas.value.getContext('2d');
})
</script>

畫文字

<template><div><canvas ref="canvas" width="300" height="400"></canvas></div>
</template><script setup>
import { ref, onMounted } from 'vue';
const canvas = ref(null);
onMounted(() => {// 初始化畫布let ctx = canvas.value.getContext('2d');// 填充白色ctx.fillStyle = "#fff";ctx.fillRect(0, 0, 300, 400);// 畫文字ctx.font = "14px Microsoft YaHei"ctx.textBaseline = "middle";ctx.textAlign = "center";ctx.fillStyle = "#333333";ctx.fillText("簡單教程,簡單編程", canvas.value.width / 2, 40);
})
</script>

畫二維碼

二維碼需要使用qrcode轉換

<template><div><canvas ref="canvas" width="300" height="400"></canvas></div>
</template><script setup>
import QRCode from 'qrcode';
import { ref, onMounted } from 'vue';
const canvas = ref(null);
onMounted(() => {// 初始化畫布let ctx = canvas.value.getContext('2d');// 填充白色ctx.fillStyle = "#fff";ctx.fillRect(0, 0, 300, 400);// 畫文字ctx.font = "14px Microsoft YaHei"ctx.textBaseline = "middle";ctx.textAlign = "center";ctx.fillStyle = "#333333";ctx.fillText("簡單教程,簡單編程", canvas.value.width / 2, 40);// 畫二維碼QRCode.toDataURL('I am a pony!', function (err, url) {let img = new Image()img.src = url;img.onload = function () {ctx.drawImage(img, 50, 50, 200, 200);}})
})
</script>

長按保存

通過監聽觸摸事件的時間判定長按

<template><div><div class="friend" @touchstart="gtouchstart()" @touchmove="gtouchmove()" @touchend="showDeleteButton()"><canvas ref="canvas" width="300" height="400"></canvas></div></div>
</template><script setup>
import QRCode from 'qrcode';
import { ref, onMounted } from 'vue';
const canvas = ref(null);
onMounted(() => {let ctx = canvas.value.getContext('2d');// 填充白色ctx.fillStyle = "#fff";ctx.fillRect(0, 0, 300, 400);// 畫文字ctx.font = "14px Microsoft YaHei"ctx.textBaseline = "middle";ctx.textAlign = "center";ctx.fillStyle = "#333333";ctx.fillText("簡單教程,簡單編程", canvas.value.width / 2, 40);// 畫二維碼QRCode.toDataURL('I am a pony!', function (err, url) {let img = new Image()img.src = url;img.onload = function () {ctx.drawImage(img, 50, 50, 200, 200);}})
})
let timeOutEvent = null //定時器 
//長按事件設置定時器
let gtouchstart = () => {timeOutEvent = setTimeout(() => {longPress()}, 700)
}//手釋放,如果在200毫秒內就釋放,則取消長按事件,此時可以執行onclick應該執行的事件
let showDeleteButton = () => {clearTimeout(timeOutEvent); //清除定時器if (timeOutEvent != 0) {timeOutEvent = 0;}return false;
}
//如果手指有移動,則取消所有事件,此時說明用戶只是要移動而不是長按
let gtouchmove = () => {clearTimeout(timeOutEvent); //清除定時器timeOutEvent = 0
}
//真正長按后應該執行的內容
let longPress = () => {timeOutEvent = 0;// 創建一個鏈接元素const link = document.createElement("a");// 將Canvas轉換為數據URLconst dataURL = canvas.value.toDataURL();// 設置鏈接的href屬性為數據URLlink.href = dataURL;// 設置鏈接的下載屬性和文件名link.download = "canvas_image.png";// 模擬點擊鏈接進行下載link.click();
}
</script><style scoped></style>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/44761.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44761.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44761.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JAVASE進階day07(泛型,集合,Set,TreeSet,枚舉,數據結構)

泛型 1.泛型的基本使用 限制集合存儲的數據類型 package com.lu.day07.generics;/*** 定義了一個泛型類* E 泛型通配字母(不固定代替真實數據類型A-Z都可以)* 常見的泛型通配字母:* E:element 元素* T:type 類型* R:return 返回值類型* K:key 鍵* …

14.爬蟲---Selenium 經典動態渲染工具的使用

14.Selenium 經典動態渲染工具的使用 1.查看chrome瀏覽器版本2.ChromeDriver 安裝3.Selenium 安裝4.驗證安裝5.基本用法5.1啟動瀏覽器5.2導航到頁面5.3查找元素5.3.1單個元素 find_element5.3.2多個元素 find_elements 5.4 執行操作5.5 動作鏈ActionChains5.6 執行 JavaScript …

Python基礎語法:運算符詳解(算術運算符、比較運算符、邏輯運算符、賦值運算符)②

文章目錄 Python中的運算符詳解一、算術運算符二、比較運算符三、邏輯運算符四、賦值運算符五、綜合示例結論 Python中的運算符詳解 在Python編程中&#xff0c;運算符用于執行各種操作&#xff0c;例如算術計算、比較、邏輯判斷和賦值。了解并掌握這些運算符的使用方法是編寫…

pychopper的安裝與使用

文章目錄 安裝使用 安裝 在Linux環境下使用conda安裝 通常習慣一個軟件一個虛擬環境&#xff1a; conda create -n pychopper -c nanoporetech -c conda-forge -c bioconda "nanoporetech::pychopper"使用 參考官方文檔&#xff1a; https://github.com/epi2me-la…

N-(4-Azido-2-nitrophenyl)-N‘‘-biotinylnorspemidine

?一、基本信息 常用名&#xff1a;N-(4-Azido-2-nitrophenyl)-N-biotinylnorspemidine 英文名&#xff1a;N-(4-Azido-2-nitrophenyl)-N-biotinylnorspemidine CAS號&#xff1a;786609-83-4 分子式&#xff1a;C22H33N9O4S 分子量&#xff1a;519.62 二、結構特點 該化…

SQL職場必備:掌握數據庫技能提升職場競爭力

&#x1f482; 個人網站:【 摸魚游戲】【網址導航】【神級代碼資源網站】&#x1f91f; 一站式輕松構建小程序、Web網站、移動應用&#xff1a;&#x1f449;注冊地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;輕量化工具創作平臺&#x1f485; 想尋找共同學習交…

vue3 + tsx 表格 Action 單獨封裝組件用法

前言 先上圖看右側列 action 的 UI 效果&#xff1a; 正常來說&#xff0c;如果一個表格的附帶 action 操作&#xff0c;我們一般會放在最右側的列里面實現&#xff0c;這個時候有些UI 框架支持在 SFC 模板里面定義額外的 solt&#xff0c;當然如果不支持&#xff0c;更通用的…

【網絡】SCTP協議概念

SCTP協議 SCTP&#xff08;Stream Control Transmission Protocol&#xff09;是一種傳輸層協議&#xff0c;設計用于提供可靠的數據傳輸服務&#xff0c;同時具備一些類似UDP&#xff08;User Datagram Protocol&#xff09;的屬性。以下是SCTP協議的基本概念、優缺點以及與T…

Linux進行vi編譯代碼出現“E45: ‘readonly‘ option is set (add ! to override)”(完美解決)。

用vi修改文件&#xff0c;保存文件時&#xff0c;提示沒有修改該文件的權限“E45: ‘readonly’ option is set (add ! to override)”的解決方法。 E45: ‘readonly’ option is set (add ! to override) 如果您遇到了“當前用戶沒有權限對文件作修改”的錯誤 1. 檢查文件…

2024.7.11最新版IDM破解,操作簡單

前言 IDM的強勁對手&#xff0c;100%免費&#xff0c;如果破解IDM失敗&#xff0c;推薦使用FDM&#xff0c;下載地址&#xff1a;Free Download Manager 破解步驟 打開PowerShell&#xff0c;非CMD 在左下角開始菜單右鍵點擊后選擇PowerShell&#xff0c;注意不是打開CMD。…

園林類專刊《花卉》簡介及投稿郵箱

園林類專刊《花卉》簡介及投稿郵箱 《花卉》雜志是經國家新聞出版總署批準&#xff0c;廣東省農業科學院主管&#xff0c;廣東省農業科學院環境園藝研究所主辦&#xff0c;面向國內外公開發行林業系統專業期刊&#xff0c;是全國從事林業、園林、生態、環保、旅游、自然資源、…

CentOS7安裝部署git和gitlab

安裝Git 在Linux系統中是需要編譯源碼的&#xff0c;首先下載所需要的依賴&#xff1a; yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker方法一 下載&#xff1a; wget https://mirrors.edge.kernel.org/pub/s…

【文檔+源碼+調試講解】冷凍倉儲管理系統

摘 要 隨著互聯網時代的到來&#xff0c;同時計算機網絡技術高速發展&#xff0c;網絡管理運用也變得越來越廣泛。因此&#xff0c;建立一個B/S結構的冷凍倉儲管理系統&#xff0c;會使冷凍倉儲管理系統工作系統化、規范化&#xff0c;也會提高冷凍倉儲管理系統平臺形象&#x…

現在國內的ddos攻擊趨勢怎么樣?想了解現在ddos的情況該去哪看?

目前&#xff0c;國內的DDoS攻擊趨勢顯示出以下幾個特征&#xff1a; 攻擊頻次顯著增加&#xff1a;根據《快快網絡2024年DDoS攻擊趨勢白皮書》&#xff0c;2023年DDoS攻擊活動有顯著攀升&#xff0c;總攻擊次數達到1246.61萬次&#xff0c;比前一年增長了18.1%。 攻擊強度和規…

微軟子公司Xandr遭隱私訴訟,或面臨巨額罰款

近日&#xff0c;歐洲隱私權倡導組織noyb對微軟子公司Xandr提起了訴訟&#xff0c;指控其透明度不足&#xff0c;侵犯了歐盟公民的數據訪問權。據指控&#xff0c;Xandr的行為涉嫌違反《通用數據保護條例》&#xff08;GFPR&#xff09;&#xff0c;因其處理信息并創建用于微目…

Shader每日一練(2)護盾

Shader "Custom/Shield" {Properties{_Size("Size", Range(0 , 10)) 1 // 控制噪聲紋理縮放大小的參數_colorPow("colorPow", Float) 1 // 控制顏色強度的指數_colorMul("colorMul", Float) 1 // 控制顏色乘法因子_mainColor("…

多旋翼+VR眼鏡:10寸FPV穿越機技術詳解

FPV&#xff08;First Person View&#xff09;穿越機&#xff0c;是指通過第一人稱視角來駕駛的無人機&#xff0c;特別強調速度和靈活性&#xff0c;常常用于競賽、航拍和探索等領域。結合多旋翼設計和VR眼鏡&#xff0c;FPV穿越機為用戶提供了身臨其境的飛行體驗。 多旋翼技…

數據庫操作和ORM(對象關系映射)框架.creat insert .save區別

1. .create 用途&#xff1a;.create 方法通常用于創建一個新的實體&#xff08;Entity&#xff09;實例&#xff0c;并為其屬性設置初始值。這個方法不會立即將實體保存到數據庫中&#xff0c;而是返回一個配置好的實體實例&#xff0c;該實例可以被進一步修改或用于后續操作…

企業網站被攻擊的常見方式是什么,該如何去做防護

隨著互聯網的普及和人們對網絡使用的增加&#xff0c;網站安全問題變得越來越突出。無論是個人還是企業&#xff0c;都需要了解并采取措施來保護自己的網站和用戶數據的安全。本文介紹常見的網站安全攻擊方式、潛在危害及其預防措施&#xff0c;幫助全面了解網站安全的各個方面…

Vue的常見指令

目錄 1.v-bind 2. class綁定 3.style綁定 4.v-if/v-show 1.v-bind v-bind指令用于綁定屬性 可以簡寫成 “ &#xff1a;” 它的作用就是我們可以動態的定義屬性的值&#xff0c;比如常見的<img src "1.jpg"> 我們如果想要修改圖片就需要獲取到DOM對象&am…