小程序圖片長(zhǎng)按識(shí)別功能的實(shí)現(xiàn)方法
背景
今天,做的小程序項(xiàng)目要求,個(gè)人中心的客服圖片在用戶長(zhǎng)按時(shí)可以識(shí)別其二維碼
在百度無(wú)果,參考小程序官方文檔后,發(fā)現(xiàn):
1.文檔中有一句提示:
"image組件中二維碼/小程序碼圖片不支持長(zhǎng)按識(shí)別,僅在 wx.previewImage 中支持長(zhǎng)按識(shí)別"
2.即便實(shí)現(xiàn)了 “wx.previewImage” 效果,但依舊是不支持二維碼識(shí)別的
附錄文檔位置:小程序圖片長(zhǎng)按識(shí)別
代碼設(shè)計(jì)
好在這也是一個(gè)不錯(cuò)的知識(shí)點(diǎn),在此進(jìn)行一番實(shí)現(xiàn)流程的記錄,歡迎指摘.
①. wxml 頁(yè)面元素設(shè)計(jì)
作為引導(dǎo)界面,只需放置一張圖片即可,以我的代碼為例
//# 使用簡(jiǎn)單的實(shí)現(xiàn)方式,直接賦值一個(gè)圖片鏈接得了 <image src="https://img.fetow.com/Public/Index/images/shewm.jpg" mode="widthFix" data-src="https://img.fetow.com/Public/Index/images/shewm.jpg" bindtap="previewImage"></image>
②. js 文件實(shí)現(xiàn) “previewImage”方法
在對(duì)應(yīng)的 js 文件中,添加了如下的方法
/**
* 圖片預(yù)覽方法
* 此處注意的一點(diǎn)就是,調(diào)用 "wx.previewImage"時(shí),第二個(gè)參數(shù)要求為數(shù)組形式哦
* 當(dāng)然,做過圖片上傳功能的應(yīng)該會(huì)注意到,如果涉及到多張圖片預(yù)覽,圖片鏈接數(shù)組集合即為參數(shù) urls!
*/
previewImage: function(e) {
var current = e.target.dataset.src;
wx.previewImage({
current: current,
urls: [current]
})
},
③. 實(shí)現(xiàn)效果
可以發(fā)現(xiàn),下圖中是沒有“識(shí)別圖中二維碼”的選項(xiàng)

如果發(fā)送給了好友或者自行保存后,在微信中打開的并長(zhǎng)按的效果如下:

出現(xiàn)問題:
1.服務(wù)器上發(fā)送過來(lái)的圖片路徑直接插進(jìn)ctx.drawImage 上,手機(jī)上顯示不了。
解決方案:利用wx.downloadFile 將圖片下載再保存好這個(gè)新圖片路徑,然后放到ctx.drawImage 上
//下載圖片
onShow1: function (object) {
let _this = this;
_this.setData({
isShowCav: true
})
wx.downloadFile({
url: object.avatarurl,
success: function (sres) {
_this.setData({
canvasUserPic: sres.tempFilePath
});
wx.downloadFile({
url: object.show_img,
success: function (sres1) {
_this.setData({
canvasShowImg: sres1.tempFilePath
});
_this.canvas(object);
}
})
}
})
},
2.canvas出現(xiàn)在手機(jī)上的頂層,不管z-index設(shè)置多少層都沒有用。
解決方案:利用wx:if="{{isShowCav}}" 將canvas臨時(shí)隱藏,要用到的時(shí)候再顯示。不用再隱藏掉。
3.canvas里面的文字如何居中,官方文檔雖然提供了案例,但是沒有說(shuō)具體是怎么用的。
解決方案:
const ctx = wx.createCanvasContext('myCanvas')
ctx.setStrokeStyle('red')
ctx.moveTo(150, 20)
ctx.lineTo(150, 170)
ctx.stroke()
ctx.setFontSize(15)
ctx.setTextAlign('left')
ctx.fillText('textAlign=left', 150, 60)
ctx.setTextAlign('center')
ctx.fillText('textAlign=center', 150, 80)
ctx.setTextAlign('right')
ctx.fillText('textAlign=right', 150, 100)
ctx.draw()

這里面的居中不是我們常用的css那種居中;而是忽略了文字寬高的意思,所以你還是要給文字設(shè)置一個(gè)(x,y)坐標(biāo),只要將這個(gè)坐標(biāo)寫上canvas寬度的一半,它就可以實(shí)現(xiàn)居中了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript數(shù)學(xué)對(duì)象之?dāng)?shù)字進(jìn)制轉(zhuǎn)換
這篇文章主要為大家講解了JavaScript數(shù)學(xué)對(duì)象——數(shù)字進(jìn)制轉(zhuǎn)換的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
JavaScript初學(xué)者容易犯的幾個(gè)錯(cuò)誤
JavaScript 是對(duì)初學(xué)者比較友好的一門編程語(yǔ)言,基本上花個(gè)半小時(shí)看下語(yǔ)法就能寫出能運(yùn)行的代碼。JavaScript 是動(dòng)態(tài)腳本語(yǔ)言,對(duì)數(shù)據(jù)類型沒有太多的限制,寫起來(lái)非常靈活。但正因?yàn)槿绱耍鯇W(xué)者如果不深入了解語(yǔ)言本身,往往會(huì)犯一些錯(cuò)誤,從而導(dǎo)致一些很難發(fā)現(xiàn)的 bug。2021-05-05
頁(yè)面點(diǎn)擊小紅心js實(shí)現(xiàn)代碼
有時(shí)候我們經(jīng)??吹接行゜log出現(xiàn)一些點(diǎn)擊頁(yè)面出現(xiàn)小紅心的效果,很是喜歡,這里就為大家分享一下代碼直接引用即可2018-05-05
JavaScript 對(duì)象模型 執(zhí)行模型
JavaScript 對(duì)象模型-執(zhí)行模型分析2009-12-12
JSCode all of Brower 全局屏蔽網(wǎng)頁(yè)右鍵功能 具體實(shí)現(xiàn)
JSCode all of Brower 全局屏蔽網(wǎng)頁(yè)右鍵功能 具體實(shí)現(xiàn),需要的朋友可以參考一下2013-06-06
javascript定時(shí)變換圖片實(shí)例代碼
javascript定時(shí)變換圖片實(shí)例代碼,需要的朋友可以參考一下2013-03-03
javascript簡(jiǎn)單實(shí)現(xiàn)深淺拷貝過程詳解
這篇文章主要介紹了javascript簡(jiǎn)單實(shí)現(xiàn)深淺拷貝過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
微信小程序封裝網(wǎng)絡(luò)請(qǐng)求和攔截器實(shí)戰(zhàn)步驟
這篇文章主要介紹了微信小程序封裝網(wǎng)絡(luò)請(qǐng)求和攔截器實(shí)戰(zhàn)步驟,這樣可以提高開發(fā)效率,減少代碼重復(fù),同時(shí)也可以提高代碼的可維護(hù)性和可讀性2023-03-03

