微信小程序動(dòng)態(tài)生成二維碼的實(shí)現(xiàn)代碼
效果圖如下:
實(shí)現(xiàn)
wxml
<!-- 存放二維碼的圖片--> <view class='container'> <image bindtap="previewImg" mode="scaleToFill" src="{{imagePath}}"></image> </view> <!-- 畫布,用來(lái)畫二維碼,只用來(lái)站位,不用來(lái)顯示--> <view class="canvas-box"> <canvas hidden="{{canvasHidden}}" style="width: 686rpx;height: 686rpx;background:#f1f1f1;" canvas-id="mycanvas" /> </view>
wxss
.container { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; } .container image { width: 686rpx; height: 686rpx; background-color: #f9f9f9; } .canvas-box { position: fixed; top: 999999rpx; left: 0; }
js
var QR = require("../../../lib/qrcode.js"); Page({ /** * 頁(yè)面的初始數(shù)據(jù) */ data: { canvasHidden: false, imagePath: '', }, /** * 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載 */ onLoad: function(options) { //option為上個(gè)頁(yè)面?zhèn)鬟f過(guò)來(lái)的參數(shù) var jiaoyanCode = 'sorry,jiaoyanCode is loss'; if (options) { jiaoyanCode = options.jiaoyanCode; } console.log(jiaoyanCode); var size = this.setCanvasSize(); //動(dòng)態(tài)設(shè)置畫布大小 this.createQrCode(jiaoyanCode, "mycanvas", size.w, size.h); }, //適配不同屏幕大小的canvas setCanvasSize: function() { var size = {}; try { var res = wx.getSystemInfoSync(); var scale = 750 / 686; //不同屏幕下canvas的適配比例;設(shè)計(jì)稿是750寬 686是因?yàn)闃邮絯xss文件中設(shè)置的大小 var width = res.windowWidth / scale; var height = width; //canvas畫布為正方形 size.w = width; size.h = height; } catch (e) { // Do something when catch error console.log("獲取設(shè)備信息失敗" + e); } return size; }, /** * 繪制二維碼圖片 */ createQrCode: function(url, canvasId, cavW, cavH) { //調(diào)用插件中的draw方法,繪制二維碼圖片 QR.api.draw(url, canvasId, cavW, cavH); setTimeout(() => { this.canvasToTempImage(); }, 1000); }, /** * 獲取臨時(shí)緩存照片路徑,存入data中 */ canvasToTempImage: function() { var that = this; //把當(dāng)前畫布指定區(qū)域的內(nèi)容導(dǎo)出生成指定大小的圖片,并返回文件路徑。 wx.canvasToTempFilePath({ canvasId: 'mycanvas', success: function(res) { var tempFilePath = res.tempFilePath; console.log(tempFilePath); that.setData({ imagePath: tempFilePath, // canvasHidden:true }); }, fail: function(res) { console.log(res); } }); }, /** * 點(diǎn)擊圖片進(jìn)行預(yù)覽 */ previewImg: function (e) { var img = this.data.imagePath; console.log(img); wx.previewImage({ current: img, // 當(dāng)前顯示圖片的http鏈接 urls: [img] // 需要預(yù)覽的圖片http鏈接列表 }); }, })
qrcode.js 可以去 這里 下載。
詳細(xì)源碼請(qǐng)查看 https://github.com/demi520/wxapp-qrcode
總結(jié)
以上所述是小編給大家介紹的微信小程序動(dòng)態(tài)生成二維碼的實(shí)現(xiàn)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
electron項(xiàng)目中實(shí)現(xiàn)視頻下載保存到本地的方式
這篇文章主要介紹了electron項(xiàng)目中實(shí)現(xiàn)視頻下載保存到本地的兩種實(shí)現(xiàn)方式,每種方式結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2024-07-07ES6知識(shí)點(diǎn)整理之模塊化的應(yīng)用詳解
這篇文章主要介紹了ES6知識(shí)點(diǎn)整理之模塊化的應(yīng)用,結(jié)合實(shí)例形式分析了基于node.js環(huán)境下模擬ES6模塊化配置與使用相關(guān)操作技巧,需要的朋友可以參考下2019-04-04Bootstrap表單簡(jiǎn)單實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Bootstrap表單的簡(jiǎn)單實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03javascript中contains是否包含功能實(shí)現(xiàn)代碼(擴(kuò)展字符、數(shù)組、dom)
原生JS中是有contains方法的,但只有dom元素的包含關(guān)系,這里腳本之家就為大家分享一下擴(kuò)展的字符string與數(shù)組arr的擴(kuò)展代碼2020-04-04JavaScript實(shí)現(xiàn)左右點(diǎn)擊切換圖片
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡(jiǎn)易左右點(diǎn)擊切換圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07uniapp?APP消息推送方案實(shí)現(xiàn)全過(guò)程
前段時(shí)間開(kāi)發(fā)app的時(shí)候要開(kāi)始做消息推送功能了,下面這篇文章主要給大家介紹了關(guān)于uniapp?APP消息推送方案實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01Javascript使用SWFUpload進(jìn)行多文件上傳
本篇文章主要解釋了使用SWFUpload進(jìn)行多文件上傳,這里整理了詳細(xì)的代碼,有需要的可以了解一下。2016-11-11JS實(shí)現(xiàn)簡(jiǎn)單的二元方程計(jì)算器功能示例
這篇文章主要介紹了JS實(shí)現(xiàn)簡(jiǎn)單的二元方程計(jì)算器功能,涉及javascript數(shù)學(xué)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-01-01