微信小程序学习:audio组件发现的几个问题

本文探讨了在微信小程序中使用audio组件时遇到的问题,特别是当action为play时的异常情况。即使修改了src或action,音乐可能无法立即播放,需要额外的操作才能正常工作。总结了两种解决方案:1. 不在初始化data中设定action,通过赋值"action.method": "play"来修改状态;2. 修改src时,无论是否设定action,都应独立设置action的状态。然而,随着audio组件的移除,此问题已不存在,但接口设置action仍存在渲染延迟问题。

      这个只测试了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还是存在一个渲染时间问题,暂时还不知道怎么解决


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值