今天微信小程式開發(fā)教學(xué)專欄為大家記錄微信小程式的踩坑。
最近參與開發(fā)了公司的第一款小程序,開發(fā)體驗(yàn)基本上類似於基於webview的混合式開發(fā),可以調(diào)用官方強(qiáng)大的api,但也有一些坑洞或說不習(xí)慣的地方。這篇文章從實(shí)用性出發(fā),記錄了開發(fā)過程中的一些問題:
#1. 樣式優(yōu)先權(quán)混亂
在使用button元件時(shí),發(fā)現(xiàn)在class中設(shè)定width不生效,下面貼上程式碼:
.my-button{??width:?140rpx;??height:?60rpx;??line-height:?60rpx;??padding:?0; }復(fù)制代碼
經(jīng)過微信調(diào)試工具排查後,發(fā)現(xiàn)user agent的樣式優(yōu)先權(quán)居然大於我們自己寫的樣式類,這在瀏覽器中基本上是不可能發(fā)生的事情
解其實(shí)比較簡單,給width加上!important
的字尾或style="width:140rpx"
即可,修改後我們?cè)倏匆幌滦Ч?/p>
加上!important
之後,其實(shí)寬度的實(shí)際效果就符合我們的預(yù)期了,但是微信調(diào)試工具卻仍然顯示user agent樣式優(yōu)先,這應(yīng)該算是調(diào)試工具的一個(gè)bug吧。
2. 普通UI元件封裝,參數(shù)定義繁瑣
一般UI視覺稿中的基礎(chǔ)元件,例如button,是有特定樣式的:比方說背景色/字體。利用小程式的Component
函數(shù)封裝成元件,編寫預(yù)設(shè)樣式並接收外部傳入的class,可以方便後續(xù)開發(fā)。
React有<tag></tag>
這種寫法,即元件接收props不做處理,只透傳給下一個(gè)元件,但小程式不支持這種寫法(苦搜無果,官方文件也沒有說明)。
這表示我們需要把所有button
元件支援的參數(shù)都羅列在properties中:
properties:?{ ????classes:?{ ??????type:?String, ??????value:?'', ????}, ????type:?{ ??????type:?String, ??????value:?'default', ????}, ????plain:?{ ??????type:?Boolean, ??????value:?false, ????}, ????size:?{ ??????type:?String, ??????value:?'default', ????}, ????...... ??},復(fù)制代碼
3. 全域樣式選擇器*
被禁用
*{ ??box-sizing:?border-box; }復(fù)制代碼
上面的程式碼在編譯的時(shí)候就會(huì)報(bào)錯(cuò),因?yàn)樾〕淌浇昧诉@類選擇器。大膽猜測(cè)具體原因:這類作用範(fàn)圍比較廣的選擇器和自訂元件的樣式隔離產(chǎn)生了衝突? ?
那怎麼去為小程式加入全域通用樣式?看來只能自己把用到的標(biāo)籤都手動(dòng)寫一遍了,還好網(wǎng)路上有現(xiàn)成的程式碼可以貼:
view,scroll-view,swiper,swiper-item,movable-area,movable-view,cover-view,cover-image,icon,text,rich-text,progress,button,checkbox-group,checkbox,form,input,label,picker,picker-view,radio-group,radio,slider,switch,textarea,navigator,functional-page-navigator,image,video,camera,live-player,live-pusher,map,canvas,open-data,web-view,ad{??box-sizing:?border-box; }復(fù)制代碼
4. 自訂元件,bind:tap呼叫兩次
封裝基礎(chǔ)元件時(shí),例如button,下面的寫法應(yīng)避免:
onTap(e)?{??if?(!this.data.disabled?&&?!this.data.loading)?{????this.triggerEvent('tap',?e.detail) ??} },復(fù)制代碼
<button></button>復(fù)制代碼
這樣封裝出來的元件,會(huì)觸發(fā)兩次tap事件,一次是小程式自身觸發(fā)的,一次是透過triggerEvent觸發(fā)。
可以換一個(gè)非小程式內(nèi)建的事件類型,像是click:
onTap(e)?{??if?(!this.data.disabled?&&?!this.data.loading)?{????this.triggerEvent('click',?e.detail) ??} },復(fù)制代碼
阻止tap事件冒泡也可以解決:
<button></button>復(fù)制代碼
5. 在wxml中用Boolean ()做類型轉(zhuǎn)換
例如在一個(gè)元件中,監(jiān)聽一個(gè)String類型的參數(shù),如果不為空則顯示text標(biāo)籤,否則不顯示:
//?player.wxml<text>{{?leftText?}}</text>復(fù)制代碼
//?index.wxml<player></player>復(fù)制代碼
這種寫法,leftText
欄位很明顯已經(jīng)傳遞了,但是依舊不顯示text標(biāo)籤,當(dāng)換一種寫法後:
//?player.wxml<text>{{?leftText?}}</text>復(fù)制代碼
這樣就是正確的,符合我們的期望。
神奇吧?
6. InnerAudioContext調(diào)用seek方法後,onTimeUpdate回調(diào)失效
InnerAudioContext
用於播放音頻,給它傳入onTimeUpdate
回調(diào)從而獲取當(dāng)前的播放進(jìn)度。
但是當(dāng)呼叫seek
方法跳到指定位置播放時(shí),onTimeUpdate
就不再被呼叫了。
小程式社群其實(shí)很多人已經(jīng)提過這個(gè)問題,大概經(jīng)歷了1年半的時(shí)間可微信團(tuán)隊(duì)遲遲沒有修復(fù),只能暫時(shí)使用折中的辦法來修復(fù),解決方案其實(shí)很簡單:
progressOnChange(e)?{??if?(this.properties.src?&&?this.data.innerAudioContext)?{????const?innerAudioContext?=?this.data.innerAudioContext; ????innerAudioContext.pause(); ????innerAudioContext.seek(innerAudioContext.duration?*?e.detail.value?/?100);????setTimeout(()?=>?{ ??????innerAudioContext.play(); ????},?500); ??} },復(fù)制代碼
先暫停播放,再執(zhí)行seek
方法,然後設(shè)定大概500ms的延時(shí)呼叫play
方法。
7. InnerAudioContext取得duration的時(shí)機(jī)問題
本來想在音訊播放前拿到duration應(yīng)該是實(shí)作不了了,網(wǎng)路上關(guān)於呼叫onPlay
、onCanplay
的說法都不太可靠,其中一個(gè)方案是這樣的:
innerAudioContext.onCanplay(()?=>?{??setTimeout(()?=>?{????this.setData({??????durationStr:?secondToTimeStr(innerAudioContext.duration)?||?'--:--', ????}); ??},?500); });復(fù)制代碼
且不說setTimeout
設(shè)定多少毫秒合適,真機(jī)上是無效的。
因此還是老實(shí)的用onTimeUpdate
:
innerAudioContext.onTimeUpdate(()?=>?{??this.setData({????durationStr:?secondToTimeStr(innerAudioContext.duration)?||?'--:--' ??}) });復(fù)制代碼
如果說覺得每次onTimeUpdate
都要計(jì)算一次很耗性能的話,可以自行實(shí)作只計(jì)算一次。
8. 設(shè)置頁面背景色
當(dāng)前頁面的json文件中有個(gè)backgroundColor字段,但是設(shè)置后無效,后面發(fā)現(xiàn)這個(gè)字段表示的不是可見區(qū)域的背景色,而是頁面下拉時(shí)窗口的背景色。
如果需要設(shè)置頁面背景色,可以通過page標(biāo)簽的樣式設(shè)置:
page{??background:?#f9fafb; }復(fù)制代碼
待更新...
相關(guān)免費(fèi)學(xué)習(xí)推薦:微信小程序開發(fā)教程
以上是記錄微信小程式的踩坑(開發(fā)篇)的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

閒魚官方微信小程式悄悄上線,在小程式中可以發(fā)布閒置與買家/賣家私訊交流、查看個(gè)人資料及訂單、搜尋物品等,有用好奇閒魚微信小程式叫什麼,現(xiàn)在快來看一下。閒魚微信小程式叫什麼答案:閒魚,閒置交易二手買賣估價(jià)回收。 1、在小程式中可以發(fā)布閒置、與買家/賣家私訊交流、查看個(gè)人資料及訂單、搜尋指定物品等功能;2、在小程式的頁面中有首頁、附近、發(fā)閒置、訊息、我的5項(xiàng)功能;3、想要使用的話必要要開通微信支付才可以購買;

實(shí)現(xiàn)微信小程式中的圖片濾鏡效果隨著社群媒體應(yīng)用程式的流行,人們?cè)絹碓较矚g在照片中應(yīng)用濾鏡效果,以增強(qiáng)照片的藝術(shù)效果和吸引力。在微信小程式中也可以實(shí)現(xiàn)圖片濾鏡效果,為使用者提供更多有趣和創(chuàng)意的照片編輯功能。本文將介紹如何在微信小程式中實(shí)現(xiàn)圖片濾鏡效果,並提供具體的程式碼範(fàn)例。首先,我們需要在微信小程式中使用canvas元件來載入和編輯圖片。 canvas元件可以在頁面

實(shí)現(xiàn)微信小程式中的下拉式選單效果,需要具體程式碼範(fàn)例隨著行動(dòng)互聯(lián)網(wǎng)的普及,微信小程式成為了網(wǎng)路開發(fā)的重要一環(huán),越來越多的人開始關(guān)注和使用微信小程式。微信小程式的開發(fā)相比傳統(tǒng)的APP開發(fā)更加簡單快捷,但也需要掌握一定的開發(fā)技巧。在微信小程式的開發(fā)中,下拉式選單是一個(gè)常見的UI元件,實(shí)現(xiàn)了更好的使用者操作體驗(yàn)。本文將詳細(xì)介紹如何在微信小程式中實(shí)現(xiàn)下拉式選單效果,並提供具

閒魚官方微信小程式已經(jīng)悄悄上線,它為用戶提供了一個(gè)便捷的平臺(tái),讓你可以輕鬆地發(fā)布和交易閒置物品。在小程式中,你可以與買家或賣家進(jìn)行私訊交流,查看個(gè)人資料和訂單,以及搜尋你想要的物品。那麼閒魚在微信小程式中究竟叫什麼呢,這篇教學(xué)攻略將為您詳細(xì)介紹,想要了解的用戶們快來跟著本文繼續(xù)閱讀吧!閒魚微信小程式叫什麼答案:閒魚,閒置交易二手買賣估價(jià)回收。 1、在小程式中可以發(fā)布閒置、與買家/賣家私訊交流、查看個(gè)人資料及訂單、搜尋指定物品等功能;2、在小程式的頁面中有首頁、附近、發(fā)閒置、訊息、我的5項(xiàng)功能;3、

微信小程式實(shí)現(xiàn)圖片上傳功能隨著行動(dòng)網(wǎng)路的發(fā)展,微信小程式已經(jīng)成為了人們生活中不可或缺的一部分。微信小程式不僅提供了豐富的應(yīng)用場景,還支援開發(fā)者自訂功能,其中包括圖片上傳功能。本文將介紹如何在微信小程式中實(shí)作圖片上傳功能,並提供具體的程式碼範(fàn)例。一、前期準(zhǔn)備工作在開始編寫程式碼之前,我們需要先下載並安裝微信開發(fā)者工具,並註冊(cè)成為微信開發(fā)者。同時(shí),也需要了解微信

實(shí)現(xiàn)微信小程式中的圖片旋轉(zhuǎn)效果,需要具體程式碼範(fàn)例微信小程式是一種輕量級(jí)的應(yīng)用程序,為用戶提供了豐富的功能和良好的用戶體驗(yàn)。在小程式中,開發(fā)者可以利用各種元件和API來實(shí)現(xiàn)各種效果。其中,圖片旋轉(zhuǎn)效果是一種常見的動(dòng)畫效果,可以為小程式增添趣味性和視覺效果。在微信小程式中實(shí)作圖片旋轉(zhuǎn)效果,需要使用小程式提供的動(dòng)畫API。以下是一個(gè)具體的程式碼範(fàn)例,展示如何在小程

使用微信小程式實(shí)現(xiàn)輪播圖切換效果微信小程式是一種輕量級(jí)的應(yīng)用程序,具有簡單、高效的開發(fā)和使用特點(diǎn)。在微信小程式中,實(shí)作輪播圖切換效果是常見的需求。本文將介紹如何使用微信小程式實(shí)現(xiàn)輪播圖切換效果,並給出具體的程式碼範(fàn)例。首先,在微信小程式的頁面檔案中,新增一個(gè)輪播圖元件。例如,可以使用<swiper>標(biāo)籤來實(shí)現(xiàn)輪播圖的切換效果。在該組件中,可以透過b

實(shí)作微信小程式中的滑動(dòng)刪除功能,需要具體程式碼範(fàn)例隨著微信小程式的流行,開發(fā)者在開發(fā)過程中經(jīng)常會(huì)遇到一些常見功能的實(shí)作問題。其中,滑動(dòng)刪除功能是常見、常用的功能需求。本文將為大家詳細(xì)介紹如何在微信小程式中實(shí)現(xiàn)滑動(dòng)刪除功能,並給出具體的程式碼範(fàn)例。一、需求分析在微信小程式中,滑動(dòng)刪除功能的實(shí)作涉及以下要點(diǎn):列表展示:要顯示可滑動(dòng)刪除的列表,每個(gè)列表項(xiàng)目需要包
