亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序踩坑:canvas、post請求不生效、頁面刷新等記錄

2020-03-21 16:29:04
字體:
來源:轉載
供稿:網友

現在也不知道距離微信公測多少日子了,反正感覺我是埋在微信小程序這個坑里很久了,公司的項目終于快接近尾聲,現在就騰點時間記錄下我的收獲,希望能給大家一點點幫助吧。

我做的幾乎都是canvas的東西,所以先說說這方面的坑以及一些解決辦法,還有一些解決不了的希望大家多多提出解決方案哈。

坑一:canvas適配

剛開始做這方面的時候,我一直以為獲取不到機型以及手機的寬高,所以硬生生的把canvas的寬高都設成了固定的320px,想想偌大的平板上就320那么大有多丑,產品估計也想把我活活掐死。好在無意間翻文檔,看到了wx.getSystemInfo(OBJECT)這個方法,OBJECT參數有三種:

success的情況下會返回:

示例代碼:

wx.getSystemInfo({  success: function(res) {    console.log(res.model)    console.log(res.pixelRatio)    console.log(res.windowWidth)    console.log(res.windowHeight)    console.log(res.language)    console.log(res.version)  }})

不管其他的,看見那個windowWidth,我的眼睛瞬間就亮了,自然而然,canvas的適配問題也就解決了。

坑二:wx.canvasToTempFilePath()

官方文檔上就這樣草草了事,所以我也是陷在坑里好久,后來才找到正確的方法。

一開始我是寫成這樣的:

wx.canvasToTempFilePath("1");

然后就是各種報錯各種郁悶,不知道大家是不是一開始就寫對了,反正我是找到正確方法后有一種想掐死小編的沖動,好歹舉個代碼實例,不然憑那一句話,我是想不到那么多的。下面是正確寫法:

wx.canvasToTempFilePath({    canvasId: '1',    success: function (res) {        var tempFilePath = res.tempFilePath;        console.log(tempFilePath);    },    fail: function (res) {        console.log(res);    }});

話說,忽然想起由這個問題引發的另一個問題,就是當把canvas置為hidden的時候,這個方法就不生效了。按理說,文檔上描述hidden只是簡單的控制顯示與隱藏,組件始終會被渲染,既然被渲染,wx.canvasToTempFilePath()這個方法不生效我是十分郁悶的,現在是沒做這方面的功能,所以也沒去深入研究了,有遇到同樣情況的可以給我回復的。

坑三:canvas畫筆粗細

當時做了畫畫的功能,在微信開發者工具上都是好好的,但一到真機上,每次一選擇畫筆粗細的時候,就畫不出來東西了,當時也是郁悶好久,后來也不知道怎么找到原因的,但最后解決了。因為當時畫筆的粗細我傳的是字符串類型的,后來改成數字類型的就好了,不知道是微信太嚴格,還是沒注意到這個小缺口。同樣的,畫筆顏色也只能是16進制的寫法,直接red,green或者縮寫成#ccc這樣的都不生效,大家注意點就行了。

坑四:context.clearActions()

不知道是不是我寫的有問題,這個方法一直不生效,所以我就用另外一個方法代替了:

context.clearRect(0, 0, 320, 320);

也是同樣的效果,清除畫布。

坑五:wx.drawCanvas()

wx.drawCanvas({   canvasId: 'firstCanvas',   actions: context.getActions() // 獲取繪圖動作數組})

官方文檔上舉的栗子一直是這樣的,所以我覺得是誤導了n+1個人,出現的問題就是:后面畫的一筆會把前面畫的一筆給覆蓋掉。我一開始也是這樣,所以還癡癡的認為微信機制和js機制不一樣,后來還想著每畫一筆就把這一筆保存到一個數組中,然后畫第二筆的時候,將這個數組全都展示出來,肉眼上看起來就像是一筆一筆畫上去的一樣,實際上是每畫一筆,就把整個數組都渲染一遍。

直到有天又看了下官方文檔,才發現大可不必那么麻煩,微信有現成的方法:

reverse方法置為true就可以解決這個問題了。

  wx.drawCanvas({    canvasId: id,    actions: context.getActions(),    reverse:true  })

canvas的坑就暫時告一段落,接著說一說其他方面的坑吧。

坑六:post請求不生效

記得當時我是這樣寫的:

wx.request({    url: url,    method:"POST",    data: {       "paintId":0,       "limit":10,       "openId":openid    },    header:{'content-type': 'application/json'},    success: function(res) {        console.log(res)    }})

每次都會返回下面這個結果:

提示request:ok,但data偏偏是Array[0]。后來微信開發者工具升級了好幾次說是修復了post請求問題,但實際上還是沒完全修復,得再改一點點東西就可以了:將header的content-type改成application/x-www-form-urlencoded就可以了。

wx.request({    url: url,    method:"POST",    data: {       "paintId":0,       "limit":10,       "openId":openid    },    header:{'content-type': 'application/x-www-form-urlencoded'},    success: function(res) {        console.log(res)    }})

之前有各種說法,說application/json會被自動過濾掉,或者又加上一個application/json,成了2個,所以之前的解決辦法是直接將header去掉不寫就可以請求成功了。現在微信修復了bug后,要把content-type改成application/x-www-form-urlencoded才可以。

坑七:刷新頁面

刷新頁面的坑其實挺多的,我羅列一下:

1、以前總有雙擊tabBar就能刷新頁面,現在沒法控制tabBar,這個也就沒辦法實現了;

2、只有下拉刷新的樣式(三個點轉呀轉那個),但沒有上拉加載的樣式(這個只能照著官方文檔的樣式自己去設計了);

3、下拉刷新在開發者工具上是好使的,3s后會自動拉回去,但在真機上就不生效,那三個小點點就回不去了,必須手動拉回去,或者當數據加載完的時候加上一個wx.stopPullDownRefresh()方法讓它停止刷新然后自動回去。

4、從頁面A跳到頁面B,再從B返回到A,想讓A自動刷新,這個怎么做呢?

先說下小程序頁面刷新的原理吧:小程序的框架邏輯比較類似react和vue框架,屬于數據驅動界面刷新,所以想讓頁面刷新的關鍵就是setData(),但這只是被動的讓頁面刷新。想讓頁面返回的時候就刷新,那就要用到onShow這個生命周期函數了,onShow是每次打開頁面都會調用一次,然后再和setData()結合就完美了。

坑八:背景圖只能是絕對路徑

應該不止一個人遇到這個問題了,背景圖寫的相對路徑,在開發者工具上顯示是正常的,但一到真機上就顯示不出來,其實只要改成絕對路徑就行了,也就是將圖片先上傳到自己的服務器,然后寫這個路徑就可以了。

坑九:傳對象到后臺不生效

當時傳了一組對象到后臺,結果后臺收到的就是[Object Object]這個鬼樣子,一直很郁悶,后來知道了JSON.stringify()方法,用了這個方法就OK了,因為傳給后臺的數據要提前字符串化。雖然現在是好使的,但中間其實也是波折不斷,不過結果是好的,也就開心了,哈哈哈。順便普及一下字符串轉對象的方法:JSON.parse()。

今天就寫這么多吧,一直在踩坑中,上面也還有很多沒解決的問題以及可能不對的地方,希望大家多多給我提意見哈。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩成人免费视频| 欧美香蕉大胸在线视频观看| 久久精品国产亚洲7777| 欧美一区二区三区免费视| 97久久精品人搡人人玩| 日韩成人激情在线| 中文字幕日韩综合av| 亚洲精品久久久久久久久| 亚洲欧美综合精品久久成人| 欧美在线www| 国产欧美日韩专区发布| 国产精品美女呻吟| 久久久亚洲影院你懂的| 91久久精品国产91性色| 亚洲欧美日韩久久久久久| 日韩精品在线视频| 亚洲韩国青草视频| 久久久噜噜噜久久中文字免| 亚洲国产精品久久久久| 亚洲成年人在线| 亚洲国产中文字幕久久网| 亚洲成人在线网| 好吊成人免视频| 亚洲成人激情小说| 38少妇精品导航| 精品日韩视频在线观看| 亚洲欧美一区二区精品久久久| 亚洲第一偷拍网| 欧美性猛交xxxx免费看漫画| 成人性生交大片免费观看嘿嘿视频| 色久欧美在线视频观看| 黄色成人av网| 欧美性生交大片免费| 亚洲sss综合天堂久久| 国产成人精品电影| 亚洲成人精品久久久| 亚洲aaaaaa| 亚洲欧美日韩综合| 亚洲新中文字幕| 久久久久久久久久国产精品| 精品动漫一区二区三区| 亚洲国产成人久久| 欧美日韩激情视频| 欧美午夜女人视频在线| 国内免费久久久久久久久久久| 亚洲精品有码在线| 久久激情五月丁香伊人| 欧美色视频日本高清在线观看| 久久精品视频免费播放| 亚洲国产精品99久久| 国产成人欧美在线观看| 国产99久久精品一区二区永久免费| 欧美黑人一级爽快片淫片高清| 中文字幕日韩av电影| 亚洲欧美日韩另类| 992tv成人免费影院| 2020欧美日韩在线视频| 91高清视频免费| 国产精品久久久久免费a∨| 欧美成aaa人片免费看| 亚洲精品一区二区三区婷婷月| 视频在线观看一区二区| 欧美视频专区一二在线观看| 亚洲欧美日韩久久久久久| 国产91精品久久久久久| 欧美性xxxxx极品| 国产视频精品免费播放| 国产精品主播视频| 亚洲一区中文字幕| 国产日本欧美一区二区三区| www.亚洲一二| 亚洲欧美综合区自拍另类| 欧美大尺度在线观看| 91精品在线播放| 国产香蕉97碰碰久久人人| 亚洲片国产一区一级在线观看| 亚洲国产古装精品网站| 亚洲人高潮女人毛茸茸| 亚洲欧美日本伦理| 亚洲大胆人体视频| 亚洲欧洲xxxx| 欧美一级视频免费在线观看| 久久人人爽人人爽人人片av高请| 性欧美xxxx交| 欧美激情综合色| 久久久视频精品| 久久久久久久久久久亚洲| 日韩中文有码在线视频| 91理论片午午论夜理片久久| 九九热视频这里只有精品| 欧美亚洲在线视频| 91高清视频在线免费观看| 色婷婷av一区二区三区在线观看| 这里只有精品在线观看| 国产不卡视频在线| 精品国产91久久久久久老师| 亚洲色图第一页| 精品国内自产拍在线观看| 国产精品99久久99久久久二8| 国产精品欧美一区二区三区奶水| 在线日韩第一页| 欧美一级淫片videoshd| 欧美放荡办公室videos4k| 欧美激情欧美狂野欧美精品| 国产精品www色诱视频| 色综合影院在线| 国产精品亚洲视频在线观看| 日韩精品www| 91精品国产一区| 亚洲国产成人久久综合| 538国产精品视频一区二区| 欧美精品久久久久| 91精品久久久久久久久久另类| 色99之美女主播在线视频| 91香蕉嫩草影院入口| 日韩中文字幕精品视频| 欧美肥婆姓交大片| 日韩在线视频导航| 欧美日韩亚洲国产一区| 日韩a**站在线观看| 欧美理论在线观看| 成人女保姆的销魂服务| 国产日韩精品在线播放| 欧美午夜视频在线观看| 午夜精品一区二区三区在线播放| 亚洲精选中文字幕| 欧美疯狂做受xxxx高潮| 热99在线视频| 欧美中文字幕视频| 欧美高清视频在线播放| 九九精品视频在线观看| 精品高清一区二区三区| 91av免费观看91av精品在线| 国产精品自拍网| 欧美韩国理论所午夜片917电影| 欧美黑人性生活视频| 欧美成人午夜激情视频| 精品无人区乱码1区2区3区在线| 国产色婷婷国产综合在线理论片a| 国产精品成人品| 97婷婷大伊香蕉精品视频| 亚洲成人久久一区| 国产精品成人观看视频国产奇米| 久久亚洲国产成人| 日韩精品免费在线播放| 欧美激情一级精品国产| 久久精品在线视频| 欧美在线视频免费播放| 国产精品嫩草影院久久久| 亚洲a一级视频| 国产伊人精品在线| 亚洲大胆人体av| 欧美日韩成人网| 综合激情国产一区| 日韩在线免费视频观看| 日韩电影在线观看免费| 欧美在线欧美在线| 欧美一级淫片videoshd| 欧美电影在线观看高清| 91亚洲精品一区| 国产精品劲爆视频| 午夜精品www| 91伊人影院在线播放| 国产一区二区在线免费视频|