微信小程序Audio列表音乐单独播放

古城微笑少年丶 2022-01-28 01:29 817阅读 0赞

问题描述

官方文档仅给出了一首音乐的播放/暂停的操作说明,而我们的音乐有时候是以列表的形式展开的。

具体操作是点击音乐播放,再次点击暂停,各音乐播放不会发生冲突。

思路

想要动态实现暂停/播放,必须动态绑定,则必须有一个变量记录当前播放的状态,我选择加入控制播放的action到音乐播放数组的每个元素中(数组是List),然后触发一个点击事件更改点击音乐的action值即可

实现

若要实现点击播放或暂停效果是一定要通过数据绑定动态实现的(代码解释在下边)

  1. <block wx:for="{
  2. {bgmList}}">
  3. <view class='container'>
  4. <audio name="{
  5. {item.name}}" author="{
  6. {item.author}}" bindtap='playorpause'
  7. action="{
  8. {item.action}}"
  9. src="{
  10. {serverUrl}}{
  11. {item.path}}" style='width:300px' id="myAudio"
  12. data-arrindex='{
  13. {index}}' controls loop>
  14. </audio>
  15. </view>
  16. </block>

音乐的播放与暂停操作是受action控制的,具体为

  1. myAction:{
  2. method:"pause" //暂停
  3. }
  4. myAction:{
  5. method:"play" //播放
  6. }

我是把音乐保存到一个bgmList中,包括名称(name),歌手(author)和播放地址(src),定义了一个点击事件(playorpause)和当前音乐在列表中的下标(data-arrindex)。然后在onLoad()方法中对data赋值时,便历bgmList,为每一个bgm增加一个action数据记录音乐是暂停还是播放

  1. var action = {method:"pause"};
  2. for(var index in bgmList){
  3. bgmList[index].action = action;
  4. }
  5. me.setData({
  6. bgmList: bgmList,
  7. });

关键在于playorpause方法的编写

  1. playorpause:function(e){
  2. var me=this;
  3. var index = e.target.dataset.arrindex; //获取点击音乐的下标
  4. var item = 'bgmList['+index+'].action'; //获取音乐的播放状态
  5. var actionPlay = {method:"play"}; //定义播放
  6. var actionPause = {method:"pause"}; //定义暂停
  7. if(me.data.bgmList[index].action.method == "pause"){ //若当前是暂停,则点击后播放
  8. me.setData({
  9. [item] : actionPlay
  10. });
  11. }else{ //若当前是播放,则点击后暂停
  12. me.setData({
  13. [item] : actionPause
  14. });
  15. }
  16. }

发表评论

表情:
评论列表 (有 0 条评论,817人围观)

还没有评论,来说两句吧...

相关阅读

    相关 程序播放音频列表

    微信小程序的音频播放    链接:[单曲播放][Link 1]   对于音频的播放,肯定会有多首音频的情况,这个时候播放下一曲的功能就需要做出来: 我这边做了一个粗糙的版