小程序模板網(wǎng)

微信小程序this報(bào)錯(cuò),后臺(tái)音樂(lè)播放注意事項(xiàng)

發(fā)布時(shí)間:2018-04-18 09:38 所屬欄目:小程序開發(fā)教程

一:this報(bào)錯(cuò)

1、報(bào)錯(cuò)this.getUserInfo(this.setData) is not a function;at pages/index/index onShow function;at api request success callback function 
TypeError: this.getUserInfo is not a function

在回調(diào)結(jié)果里調(diào)用這個(gè)頁(yè)面的函數(shù) this.fun() 或者 this.setData 時(shí)就會(huì)報(bào)錯(cuò),這時(shí)要在函數(shù)一開時(shí)的地方使用var that = this;,然后使用that調(diào)用數(shù)據(jù)。

這里的this指向的就是請(qǐng)求本身了如( wx.request ),而不是這個(gè)頁(yè)面?。?!

 

				
  1. onLoad:function(options){
  2. this.login();
  3. },
  4.  
  5. login:function(){
  6. var that = this;// 這個(gè)地方非常重要,重置data{}里數(shù)據(jù)時(shí)候setData方法的this應(yīng)為以及函數(shù)的this, 如果在下方的sucess直接寫this就變成了wx.request()的this了
  7. wx.login({
  8. success: function (res) {
  9. if (res.code) {
  10. //發(fā)起網(wǎng)絡(luò)請(qǐng)求
  11. wx.request({
  12. url: 'https://applet.ech-med.com/appwx/getAppToken',
  13. data: {
  14. code: res.code
  15. },
  16. success: function (re) {
  17. console.log(re);that.getUserInfo();
  18.          that.setData({ });//如果在sucess直接寫this就變成了wx.request()的this了.必須為getdata函數(shù)的this,不然無(wú)法重置調(diào)用函數(shù)
  19. }
  20. })
  21. } else {
  22. console.log('獲取用戶登錄態(tài)失??!' + res.errMsg)
  23. }
  24. }
  25. })
  26. },
  27.  
  28. getUserInfo: function () {
  29. console.log("獲取用戶信息")
  30. },
 

二:后臺(tái)音樂(lè)播放注意事項(xiàng)

分享者:默識(shí),來(lái)自原文地址

  1. wx.seekBackgroundAudio(OBJECT)

    作用:控制音樂(lè)播放進(jìn)度。

    注意: 該事件 會(huì)觸發(fā) wx.onBackgroundAudioPlay(CALLBACK) 事件 ,也就是相當(dāng)于在調(diào)整進(jìn)度后,后臺(tái)會(huì)自動(dòng)的調(diào)用wx.playBackgroundAudio(OBJECT)函數(shù)。

  2. 使用 audio組件 制作的播放器,即使點(diǎn)擊"顯示在微信頂部",音樂(lè)依然會(huì)停止,使用 wx.playBackgroundAudio 相關(guān)API制作的播放器才不會(huì)。

  3. wx.playBackgroundAudio(OBJECT),wx.pauseBackgroundAudio(),wx.seekBackgroundAudio(OBJECT),wx.stopBackgroundAudio()

    注意:上述四個(gè)操作都是 異步操作,都可以設(shè)置OBJECT參數(shù),都有 success , fail , complete 回調(diào) ,參照wx.playBackgroundAudio(OBJECT) 的 OBJECT說(shuō)明,OBJECT說(shuō)明

  4. 后臺(tái)播放音樂(lè)暫停后怎么從上次播放的地方繼續(xù)播放?

    • 使用 seekBackgroundAudio。

      官網(wǎng)并沒(méi)有相關(guān)解釋,初步思路是使用 playBackgroundAudio 播放音樂(lè)后,再調(diào)用 seekBackgroundAudio 將進(jìn)度調(diào)整到上次停止的地方,但是由上面的第一條所描述,這樣做的結(jié)果會(huì)導(dǎo)致onBackgroundAudioPlay 會(huì)被觸發(fā)兩次,所以我們可以直接調(diào)用seekBackgroundAudio調(diào)整播放進(jìn)度即可(前提是之前有播放過(guò)歌曲,就是確保歌曲地址已經(jīng)被設(shè)置,不然無(wú)效),隨后音樂(lè)會(huì)自動(dòng)播放.

    • 使用 playBackgroundAudio

      經(jīng)測(cè)試調(diào)用playBackgroundAudio,并且傳入的歌曲地址參數(shù)和上次相同時(shí),歌曲會(huì)從上次暫停的時(shí)間位置繼續(xù)播放

  5. wx.stopBackgroundAudio

    注意:經(jīng)測(cè)試,再調(diào)用 wx.stopBackgroundAudio 函數(shù)之后,緊接著調(diào)用 wx.playBackgroundAudio ,在pc端模擬測(cè)試時(shí)正常,后臺(tái)會(huì)停止播放音樂(lè),然后再播放新的音樂(lè),但是,在手機(jī)上卻會(huì)打斷緊接著調(diào)用的 wx.playBackgroundAudio 的播放(坑啊T-T),測(cè)試真機(jī)為phone5。

  6. 回調(diào)函數(shù)的觸發(fā)時(shí)機(jī)。

    • wx.onBackgroundAudioPlay(CALLBACK) 監(jiān)聽音樂(lè)播放。

    • wx.onBackgroundAudioPause(CALLBACK) 監(jiān)聽音樂(lè)暫停。

    • wx.onBackgroundAudioStop(CALLBACK) 監(jiān)聽音樂(lè)停止。

    上述監(jiān)聽函數(shù)會(huì)在調(diào)用對(duì)應(yīng)的wx.playBackgroundAudio(OBJECT),wx.pauseBackgroundAudio(),wx.stopBackgroundAudio()等函數(shù)時(shí),會(huì)被立即觸發(fā),對(duì)應(yīng)的操作可能并沒(méi)有完成,比如調(diào)用 playBackgroundAudio播放音樂(lè),只是給后臺(tái)發(fā)送信息,要播放音樂(lè),但是此時(shí)音樂(lè)并沒(méi)有開始播放,可能還在加載等等,但是onBackgroundAudioPlay的回調(diào)函數(shù)會(huì)立即調(diào)用。

    而wx.playBackgroundAudio(OBJECT),wx.pauseBackgroundAudio(OBJECT),wx.seekBackgroundAudio(OBJECT),wx.stopBackgroundAudio(OBJECT)中OBJECT里面的回調(diào)函數(shù)會(huì)在如下對(duì)應(yīng)條件觸發(fā):

    • 在歌曲加載完成之后,可以播放時(shí)觸發(fā)

    • 在歌曲暫停之后,沒(méi)有聲音之后觸發(fā)

    • 歌曲進(jìn)度設(shè)置完成并且開始播放之后觸發(fā)

    • 歌曲停止之后觸發(fā)

    wx.onBackgroundAudioPlay(CALLBACK) , wx.onBackgroundAudioPause(CALLBACK) , wx.onBackgroundAudioStop(CALLBACK) 函數(shù)可以監(jiān)聽后臺(tái)操作歌曲時(shí),觸發(fā)的事件,比如當(dāng)小程序退出后,音樂(lè)暫停,也包括我們使用 wx.pauseBackgroundAudio 等函數(shù)時(shí)觸發(fā)的事件。

    在wx.onBackgroundAudioPause(OBJECT)里面的 暫?;卣{(diào)函數(shù)函數(shù)不會(huì)被觸發(fā),wx.pauseBackgroundAudio(OBJECT)里面的回調(diào)函數(shù)只是當(dāng)次主動(dòng)操作有效。后臺(tái)自動(dòng)暫停歌曲時(shí)并不會(huì)觸發(fā)該回調(diào)函數(shù),wx.playBackgroundAudio(OBJECT),wx.pauseBackgroundAudio(),wx.seekBackgroundAudio(OBJECT),wx.stopBackgroundAudio()都是一樣的機(jī)制。

  7. 怎么獲取歌曲播放時(shí)的 回調(diào)函數(shù)?

    微信小程序官方文檔,playBackgroundAudio相關(guān)額API并沒(méi)有提供此函數(shù),但是提供了wx.getBackgroundAudioPlayerState函數(shù)用于獲取歌曲播放時(shí)歌曲額進(jìn)度信息,所以我們可以使用setInterval定時(shí)函數(shù)模擬這個(gè)事件。下面是我模擬的相關(guān)事件,

    var timer = setInterval(() => {
        wx.getBackgroundAudioPlayerState({
            success:function(res){
                //調(diào)用需要更新的
                //self._onUpdate(res);
            }
        });
    }, 500);
  8. 最重要的一點(diǎn),pc端的模擬器,上面描述的事件觸的順序會(huì)可能和手機(jī)端的觸發(fā)順序不一樣(T-T,天坑,本來(lái)調(diào)試好好的,pc端app突然就抽風(fēng),炸了,有時(shí)候播放歌曲后 立刻就暫停,至今不知道是為什么,手機(jī)端卻是正常的),所以還是多真機(jī)調(diào)試吧,都是淚。



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉(cāng)庫(kù):starfork
本文地址:http://22321a.com/wxmini/doc/course/23609.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢