小程序学习(6)——在现有基础上做音乐组件

本文介绍了在小程序中实现音乐播放功能的步骤,包括点击事件响应、音乐状态同步、全局变量的使用以及音乐图标的变化。在遇到播放与控制按钮不同步的问题时,通过监听音乐API解决了同步问题,并在全局范围内协调音乐播放状态。此外,还讨论了如何根据文章ID动态调整音乐组件,确保多页面间的音乐播放状态正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在之前的基础上已经将前边的界面搭配的基本上是可以看了,这个时候做我们的音乐播放功能。大体功能其实和收藏功能类似。

前边已经完成了以下内容
在这里插入图片描述
我们要做的就是在这个上边可以播放音乐,即一点击音乐按钮即播放音乐。

一、播放功能实现

首先在前端“.wxml”中的音乐图标上写上一个点击事件。来响应我们点击时的变化。catchtap="onMusictap"

在脚本文件中开始对点击事件的描述
1、因为每篇文章的音乐肯定是不一样的,所以我们需要把每篇文章的ID都要获取到,才可以区分每一篇文章的音乐。
方法与之前类似,通过data中自定义的一个变量来接收ID的值

var musicID=this.data.currentPostId;

2、通过数据文件的id来获取状态
因为没有绑定数据库,文件都是写在数据文件中的,所以我们来获取状态

var luoji = newlistDB.newslist[musicID].music;

3、现在我们就到了考虑改变播放按钮改变的地方,点击播放是一个样子,暂停是一个样子。musictab是一个状态,用来判断图标是否改变,做成了本脚本文件的全局变量,存放在data中。默认为false

 var musictab = this.data.musictab;

在前端,这个时候我们可以使用收藏的方法,用“wx:if”"wx:else"来实现。也可以使用其他方法,这个地方我们使用三目运算符来计算图片的引用方法。

 src="{{musictab?'/images/music/music-stop.png':'/images/music/music-start.png'}}"

4、判断musictab的状态是播放还是暂停状态。
如果是false,那么调用暂停的API,否则调用播放的API,然后对相应状态进行数据绑定。

if (musictab) {
        wx.pauseBackgroundAudio();
        this.setData({
          musictab: false
        })
      } else {
        wx.playBackgroundAudio({
          dataUrl: luoji.url,//URL连接
          title: luoji.title,//标题
          coverImgUrl: luoji.coverImg//背景图
        })
        this.setData({
          musictab: true
        })
      }

这样我们的音乐基本功能就可以实现了。

二、修改
1、同步问题

实现之后发现,在我们点击暂停的时候,他和总控台弹出的控制按钮并不会达到同步,如图所示
在这里插入图片描述
这个时候我们就需要解决这个问题了,如何使总控台和我们的点击按钮可以同步

这个时候在开发者文档中,我们就看到了另外一个API,监听音乐API
在这里插入图片描述
一个监听音乐播放
一个监听音乐结束

因为我们要在文章一开始就监测到状态,那么我们在整个界面刚一打开时就启动检测状态,即放在onLoad里边让他在页面打开的时候就开始工作。

 //监听音乐播放是否启动
    var that=this;
    wx.onBackgroundAudioPlay(function(){
      that.setData({
        musictab:true
      })
    }),
    wx.onBackgroundAudioPause((function(){
      that.setData({
        musictab:false
      })
    })
2、全局变量

设置全局变量之前,我们在退出播放界面后,重新进入之后,图标变回了原样,但是音乐仍然在播放,没有实现同步的效果,这个时候就需要了全局变量。
来实现变化的同步。

首先在app.js中定义一个全局变量,来行使作用
在这里插入图片描述

接下来在要使用的脚本文件中引用,引用格式如下

var app=getApp();

因为我们是要在一开始就获取到状态,并且还要搭配着监听API使用,那么肯定也是需要放在onLoad里边的。

那么就引用他并判断我们当前的状态
在这里插入图片描述

因为onLoad中的代码太长,就将监听的部分分离了出来,如图,我们首先判断当前全局变量的状态是什么,如果正确就切换到对应的状态中,而在监听中,我们需要听过监听到的信息,在数据绑定之后也同步修改全局变量的状态。这样就可以保持一个不变的样式。

3、音乐与图标的变化

在修改完这些东西之后,会发现还有一个很大的东西没有改变,就是我们的文章页播放按钮的变化,并没有因为每次播放的音乐在不同页而变化,在一个页面播放音乐,点进去其他页面,还是在播放这个音乐,这肯定是不可以的,我们就需要改变他,让他可以根据ID来自主根据音乐播放页的不同而变化。

这个时候因为涉及到了多页面的变化,所以单一脚本变量肯定是不够的,就需要了使用全局变量,方法如上一个内容。

接下来在上边我们判断全局函数的地方,加上我们对ID的判断
在这里插入图片描述
这样就可以获取到ID的不同了,但是光这样还是不可以的,我们还应该考虑到在我们点击播放的时候,要把ID传给他,否则怎么进行ID判断,在没有播放之后,就应该就获取到的ID清空,这样就不耽误下一个ID值得进入了,是吧。
在这里插入图片描述

音乐的部分就是这些,我还是代码+注释放在github上,要不csdn的积分伤不起。

GIT源码+注释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值