微信小程式學習:audio元件發現的幾個問題

草燈發表於2016-10-18

      這個只測試了action的method=play的情況下,其它的方法我有稍微改變了下src和action方法,發現只要一切換其它action方法和src歌曲後,歌曲都是未開播狀態,所以應該不會出現什麼問題。主要是play的情況下有幾個小問題需要注意下!先上官方原始碼:

wxml::

<!-- 迴圈播放 -->
<audio poster="{{poster}}" name="{{name}}" author="{{author}}" src="{{src}}" action="{{action}}" controls loop></audio>

<button type="primary" bindtap="audioPlay">播放</button>

js::

Page({
  data: {
    poster: 'http://y.gtimg.cn/music/photo_new/T002R300x300M000003rsKF44GyaSk.jpg?max_age=2592000',
    name: '此時此刻',
    author: '許巍',
    src: 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E06DCBDC9AB7C49FD713D632D313AC4858BACB8DDD29067D3C601481D36E62053BF8DFEAF74C0A5CCFADD6471160CAF3E6A&fromtag=46',
  },
  audioPlay: function () {
     this.setData({
       action: {
         method: 'play'
       }
     })
  },
  onLoad: function(options){

  }
})


以上是官方原始碼,執行都正常,但是我做了如下測試:

1、action的賦值方式

this.setData({
      'action.method': 'play'
    })

我修改成這種賦值方式也能正常開啟播放,如果我在page的data裡面預先建立action物件,雖然值有被正常修改過來,但是音樂就是無法一開啟就播放,需要按f5重新整理下頁面。完整測試程式碼如下:

Page({
  data: {
    poster: 'http://y.gtimg.cn/music/photo_new/T002R300x300M000003rsKF44GyaSk.jpg?max_age=2592000',
    name: '此時此刻',
    author: '許巍',
    src: 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E06DCBDC9AB7C49FD713D632D313AC4858BACB8DDD29067D3C601481D36E62053BF8DFEAF74C0A5CCFADD6471160CAF3E6A&fromtag=46',
    action:
    {
      method: 'pause'
    }
  },
  audioPlay: function () {
    this.setData({
      'action.method': 'play'//在data裡面先定義action,這種賦值方式有效但是播放無效,需要再次重新整理頁面
    })
  })

演示效果:



2、更改了src曲目後在開啟播放狀態

this.setData({
      src: "../audio/files/AlexGoot&KurtSchneider&Eppic-SeeYouAgain.aac",
       action: {
         method: 'play'
       }
    })

我修改了src的曲目,發現不管有沒有在data裡面預先定義action物件都是能修改狀態值,但是音樂就是無法播放,需要點選兩次按鈕,或者f5重新整理下頁面才有效。

演示效果【左邊是點選兩次才開啟播放,右邊是點選後在重新整理才能開啟播放】:




最後發現修改src和action分開設定就能正常播放了。完整程式碼如下:

Page({
  data: {
    poster: 'http://y.gtimg.cn/music/photo_new/T002R300x300M000003rsKF44GyaSk.jpg?max_age=2592000',
    name: '此時此刻',
    author: '許巍',
    src: 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E06DCBDC9AB7C49FD713D632D313AC4858BACB8DDD29067D3C601481D36E62053BF8DFEAF74C0A5CCFADD6471160CAF3E6A&fromtag=46',
    action:
    {
      method: 'pause'
    }
  },
  audioPlay: function () {
    this.setData({
      src: "../audio/files/AlexGoot&KurtSchneider&Eppic-SeeYouAgain.aac",
    })
     this.setData({
       action: {
         method: 'play'//需要分開設定
       }
     })
  })
或者下面這種方式也可以:

Page({
  data: {
    poster: 'http://y.gtimg.cn/music/photo_new/T002R300x300M000003rsKF44GyaSk.jpg?max_age=2592000',
    name: '此時此刻',
    author: '許巍',
    src: 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E06DCBDC9AB7C49FD713D632D313AC4858BACB8DDD29067D3C601481D36E62053BF8DFEAF74C0A5CCFADD6471160CAF3E6A&fromtag=46',

  },
  audioPlay: function () {
    this.setData({
      src: "../audio/files/AlexGoot&KurtSchneider&Eppic-SeeYouAgain.aac",
    })
    this.setData({
      'action.method': 'play'//data沒有定義action,使用這種賦值方式
    })
  })



      總結以上兩種方案:

1、初始化data不設定action,可以使用"action.method": "play"修改狀態

2、修改src曲目的時候不管有沒有初始化設定action,修改action的狀態都要分開設定


*************************************************************************************************************************

目前audio元件微信小程式已經移除,也就不存在這個情況了,不過使用介面形式來設定action還是存在一個渲染時間問題,暫時還不知道怎麼解決


相關文章