【微信小程序】繪制二維碼實現及解決canvas層級問題最佳實踐

前言

很久沒寫微信小程序的需求了,今天來活兒要做個二維碼掃碼相關的需求,本來以為是灑灑水的事情,誰知道也折磨了大半天,今天特此記錄一下~
需求:點擊按鈕,彈出二維碼,二維碼內容固定為test

源碼地址

代碼實現

首先我們知道,繪制二維碼我們必須依賴第三方庫實現。在web端常用是qrcode,而小程序端則使用weapp-qrcode

我們跟著文章來使用一下, 我們來新建代碼片段

npm install weapp-qrcode-canvas-2d --save

在這里插入圖片描述
如果構建失敗,則先執行npm init 一路回車后,再執行上述操作
在這里插入圖片描述

構建npm完成后,我們繼續參考示例

// index.html
<canvas type="2d" style="width: 260px; height: 260px;" id="myQrcode"></canvas>//index.js
import drawQrcode from 'weapp-qrcode-canvas-2d'onLoad() {const query = wx.createSelectorQuery()query.select('#myQrcode').fields({node: true,size: true}).exec((res) => {var canvas = res[0].node// 調用方法drawQrcode生成二維碼drawQrcode({canvas: canvas,canvasId: 'myQrcode',width: 260,padding: 30,background: '#ffffff',foreground: '#000000',text: 'abc',})// 獲取臨時路徑(得到之后,想干嘛就干嘛了)wx.canvasToTempFilePath({canvasId: 'myQrcode',canvas: canvas,x: 0,y: 0,width: 260,height: 260,destWidth: 260,destHeight: 260,success(res) {console.log('二維碼臨時路徑:', res.tempFilePath)},fail(res) {console.error(res)}})})
}

現在,你可以在模擬器中看到一個大大的二維碼,內容為abc 。可是我們的需求是點擊后再顯示二維碼。

提示:

  1. canvas的層級永遠是最上層!因此我們無法用z-index: -1隱藏
  2. canvas不可以用hiddenwx:if隱藏,否則wx.canvasToTempFilePath失效

于是,既然我們不能隨心所欲控制canvas,那我們就改變思路,控制image即可,也就是說將canvas繪制的二維碼保存到本地,用圖片渲染即可。

除此之外,為了不讓canvas出現在我們的頁面中,我們用CSS絕對定位到屏幕外面,這樣既沒有隱藏該節點,又不讓用戶看到這個討厭的canvas

最后,drawQrcode繪制二維碼是一個異步操作,我們必須等待他執行完畢再獲取臨時路徑。

基于以上的經驗和思考,我們最后給出代碼:

import drawQrcode from 'weapp-qrcode-canvas-2d'Page({data: {src: "",flag: false,},onLoad() {// 選中節點const query = wx.createSelectorQuery()query.select('#myQrcode').fields({node: true,size: true}).exec((res) => {var canvas = res[0].node// 調用方法drawQrcode生成二維碼drawQrcode({// ...配置項}).then(res => {console.log(res, canvas);// 獲取臨時路徑(得到之后,想干嘛就干嘛了)wx.canvasToTempFilePath({//...配置項success: (res) => {console.log('二維碼臨時路徑:', res.tempFilePath)this.setData({src: res.tempFilePath})},})})})},onclick() {const flag = this.data.flag;// 狀態取反,控制顯示隱藏this.setData({flag: !flag})}
})
// html
<view class="box" bind:tap="onclick">點擊打開二維碼
</view><view class="box" wx:if="{{flag}}"><image style="width: 100%; height: 100%;" src="{{src}}" mode="aspectFill"/>
</view><canvas type="2d" style="width: 260px; height: 260px; position: absolute; top: -100%;" id="myQrcode"></canvas>
// index.css
.box {width: 100rpx;height: 100rpx;background-color: pink;margin: 100rpx auto;
}

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

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

相關文章

獨孤思維:不喜愛的再賺錢也別碰,因為你愛無能

很多人都說什么工作收入高做什么&#xff1b; 很多女人說哪個男人有錢嫁哪個&#xff1b; 很多粉絲說什么項目賺錢做什么。 本質上不是你愛這個工作&#xff0c;愛這個男人&#xff0c;愛這個項目。 而是你愛錢。 但是愛錢&#xff0c;要付出代價。 工作收入高&#xff0…

Dubbo框架

1&#xff1a;簡介 Dubbo 是阿里巴巴公司開源的一個Java高性能優秀的服務框架 Apache Dubbo 是一款 RPC 服務開發框架&#xff0c;用于解決微服務架構下的服務治理與通信問題 這是Dubbo官網的介紹&#xff0c;下面是我對這dubbo的理解 首先介紹下什么是RPC&#xff1a; 常…

為什么說品牌低價不是一件好事

消費者貨比三價為的是買到低價質優的產品&#xff0c;而網絡電商平臺的公開&#xff0c;也促進了消費者及品牌進行比價&#xff0c;那品牌低價一定就是好事嗎&#xff0c;一定會拉高品牌銷量嗎。其實是不一定的&#xff0c;低價意味著成本的降低&#xff0c;也可能滋生很多產品…

【精選】改進的YOLOv5:紅外遙感圖像微型目標的高效識別系統

1.研究背景與意義 隨著科技的不斷發展&#xff0c;紅外遙感技術在軍事、安防、環境監測等領域中得到了廣泛應用。紅外遙感圖像具有獨特的優勢&#xff0c;可以在夜間或惡劣天氣條件下獲取目標信息&#xff0c;因此在小目標檢測方面具有重要的應用價值。然而&#xff0c;由于紅…

專注短視頻賬號矩陣系統源頭開發---saas工具

專注短視頻賬號矩陣系統源頭開發---saas營銷化工具&#xff0c;目前我們作為一家純技術開發團隊目前已經專注打磨開發這套系統企業版/線下版兩個版本的saas營銷拓客工具已經3年了&#xff0c;本套系統邏輯主要是從ai智能批量剪輯、賬號矩陣全托管發布、私信觸單收錄、文案ai智能…

微服務實戰系列之簽名Sign

前言 昨日恰逢“小雪”節氣&#xff0c;今日寒風如約而至。清晨的馬路上&#xff0c;除了洋洋灑灑的落葉&#xff0c;就是熙熙攘攘的上班族。眼看著&#xff0c;暖冬愈明顯了&#xff0c;葉子來不及泛黃就告別了樹。變化總是在不經意中發生&#xff0c;容不得半刻糊涂。 上集博…

kubernetes 部署 spinnaker

spinnaker簡介 Spinnaker 是一個開源、多云持續交付平臺&#xff0c;它將強大而靈活的管道管理系統與主要云提供商的集成相結合。Spinnaker 提供應用程序管理和部署&#xff0c;幫助您快速、自信地發布軟件變更。 Spinnaker 提供了兩組核心的功能&#xff1a; 應用管理與應用程…

從根到葉:隨機森林模型的深入探索

一、說明 在本綜合指南中&#xff0c;我們將超越基礎知識。當您盯著隨機森林模型的文檔時&#xff0c;您將不再對“節點雜質”、“加權分數”或“成本復雜性修剪”等術語感到不知所措。相反&#xff0c;我們將剖析每個參數&#xff0c;闡明其作用和影響。通過理論和 Python 實踐…

Navicat 技術指引 | 適用于 GaussDB 的備份與還原功能

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持對 GaussDB 主備版的管理和開發功能。它不僅具備輕松、便捷的可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結構同步、協同合作、數據遷移等&#xff09;&#xff0c;這…

如何評估供應商協同平臺的功能和性能

在制造業中&#xff0c;供應商協同平臺是一種重要的工具&#xff0c;可以幫助企業與供應商建立更緊密的合作關系&#xff0c;提高采購效率&#xff0c;降低成本。而SRM系統是一種集成的供應鏈管理系統&#xff0c;可以協調和管理企業與供應商之間的業務關系&#xff0c;包括供應…

【lodash】 關于Some的相關用法

1. 判斷集合某個字段是否存在小于0 的 使用 lodash 庫的 some 函數可以用來判斷集合中某個字段是否存在小于 0 的值。你可以使用以下代碼實現&#xff1a; const _ require(lodash);const collection [{ id: 1, value: 10 },{ id: 2, value: -5 },{ id: 3, value: 20 }, ];…

Sealos 云操作系統私有化部署教程

Sealos 私有云已經正式發布了&#xff0c;它為企業用云提供了一種革命性的新方案。Sealos 的核心優勢在于&#xff0c;它允許企業在自己的機房中一鍵構建一個功能與 Sealos 公有云完全相同的私有云。這意味著企業可以在自己的控制和安全范圍內&#xff0c;享受到公有云所提供的…

OTP語音芯片WTN6xxx-8S與Flash語音芯片WT588F02B-8S的區別與應用選擇

隨著科技的快速發展&#xff0c;語音芯片已經成為了電子產品中不可或缺的一部分。唯創知音作為知名的語音芯片制造商&#xff0c;推出了OTP語音芯片WTN6xxx-8S和Flash語音芯片WT588F02B-8S兩款產品。本文將對比這兩款芯片的區別&#xff0c;以幫助讀者更好地選擇適合的語音芯片…

高通OTA升級方案介紹

高通OTA升級方案介紹 1. 高通LE OTA1.1 背景1.2 Recovery系統 2. SDX12 OTA方案3 OTA包的加密 3UK Penetration Test對于OTA升級也有嚴格的安全要求&#xff0c;下面是幾條用例要求&#xff1a; Firmware: A sufficiently strong signing key MUST be in use. Signing keys MUS…

了解消息隊列的五大痛點

文章字數&#xff1a;400字&#xff0c;建議閱讀時間&#xff1a;3分鐘&#xff0c;閱讀難度&#xff1a;中等。 解決消息隊列的五大痛點 在分布式系統中&#xff0c;消息隊列&#xff08;MQ&#xff09;是一種重要的組件&#xff0c;它能夠幫助我們處理并發和異步的問題。然…

visionOS空間計算實戰開發教程Day 6 拖拽和點擊

在之前的學習中我們在空間中添加了3D模型&#xff0c;但在初始擺放后就無法再對其進行移動或做出修改。本節我們在??Day 5??顯示和隱藏的基礎上讓我們模型可以實現拖拽效果&#xff0c;同時對純色的立方體實現點擊隨機換色的功能。 首先是入口文件&#xff0c;無需做出改變…

Linux反彈SHell與檢測思路

免責聲明 文章僅做經驗分享用途,利用本文章所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,作者不為此承擔任何責任,一旦造成后果請自行承擔!!! 反彈shell payload在線生成 https://www.chinabaiker.com/Hack-Tools/ Online - Reverse Shell G…

Talk | UCSB博士生宋珍巧:基于人工智能的功能性蛋白質設計

本期為TechBeat人工智能社區第549期線上Talk。 北京時間11月22日(周三)20:00&#xff0c;UC Santa Barbara博士生—宋珍巧的Talk已準時在TechBeat人工智能社區開播&#xff01; 她與大家分享的主題是: “基于人工智能的功能性蛋白質設計”&#xff0c;介紹了如何利用機器學習算…

linux下文件夾上有個鎖或者x 如何去除

發現linux下文件夾上有個鎖或者x 如何去除 原因 權限問題 解決方法 sudo chmod 777 filename 去除當前文件夾以及所有子文件夾 sudo chmod -R 777 filename

itext - PDF模板套打

項目需求&#xff1a;獲取列表數據之后直接將數據生成一個pdf。因此需要使用到 itext 對pdf進行直接操作。 環境配置 需要為pdf添加文字域&#xff0c;因此需要安裝Adobe Acrobat 準備一個空的PDF文件&#xff0c;如果有現成的模板更好 依賴配置&#xff0c;我們使用itext的7版…