00:01
好,那我们继续啊,那上一节课呢,解决了这个系统任务栏控制我们音乐播放暂停,包括停止的问题啊,那这节课呢,大家再看一个问题啊,看着假设啊,用户进来这个列表页。对吧,他说诶,我听一下练习这首歌吧,那么进来人家点了一个播放。啊,音乐在播放,哎,我把音乐先停掉啊,那么他在播放的时候,人家说,哎,我后退一下,我去看看还有什么音乐。对吧,那看的差不多了,回头哎,我说我还是来到这个练习这个页面,我再听一会儿吧。那这个时候大家看其实现在的音乐。再播放。对吧,啊,音乐在播放,但是这个显示的状态是错的。显示的状态是未播放。嗯,那这是为什么呢?首先当我们一回退。那么之前的详情页还在不在?
01:01
就不在了,被销毁了,通过APP data呢,我们也能看到啊,你看现在呢,推荐页和详情页是不是都在啊,那等到我们一回退,你看详情页就被销毁了,那么下一次再进来的时候。在在进来的时候,那么这个页面重新加载的话,对应的is please个变量。是否重新要初始化?对应的就是我们得塔中这个变量是不是要重新初始化呀?重新初始化,那么它的初始化的值是false,所以啊,现在的问题是我们整个系统的音乐在播放,这不是吗?但是状态是错的。那么怎么解决这个问题呢?那如果说我们某一个页面的音乐再播放的话。我们就要把这个页面播放的这个状态是不是应该保存在某一个地方存起来。而。当我们后退再进来的时候,我们应该要从这个地方呢,去读一下这个是否播放的状态。
02:04
如果说再播放,那我就赶紧把当前页面的这个is play是不是修改为true就好了。而且我们要选择存放的这个地方呢,一定是不受这个页面销毁的影响的。那也是,你的页面虽然销毁了,但是我这儿的状态还在。那。大家想想看啊,就我们学过的知识,我们可以存到哪?哎,对,其实就我们学过的知识呢,我们可以存到storage里面。对吧,这是一个办法。那么除了story呢?哎,其实还有一个地方。啊,那就是我接下来要给大家讲的一个新的知识点啊。来。来到我们的官网啊啊,来到我们的框架这一块。那么在这个里面呢,我们找这个框架接口,小程序APP这。这里面呢,APP针说针对的是app.gs我们说在这个里边,APP调用是注册小程序对不对。
03:08
对应的代码呢?在哪呢?在我们项目的ab.GS中。这个东西。那么这里面的东西我们还从来都没有用过的。那我们接下来要用啥呢?来,大家往下看啊,这有一个get APP。我们通过这个方法get APP呢,可以获取到小程序全局唯一的实例。那我们可以拿到整个应用的实例来,下面有代码。哎,Get APP呢?返回一个应用的实例,那么有了这个应用的实例,我们可以干嘛呢?哎,他这是点了个global data。有一句话很明确啊,叫全局的得塔。然后后面写的是m global data,那这啥意思呢,回头看。大家看啊,在APP这呢,它下面其实有一个示例,在这个里面,你可以通过global data呢去初始化数据。
04:04
然后通过应用点global data呢,就能够拿到对应的数据。那也就是说我们可以在全局这儿呢,也像我们页面实例一样。去初始化数据。啊,其实在这儿呢,写得也行啊,这里面呢,就是一个对象。点属性啊,就是介质对的形式,只不过啊我们为了区分这是全局的数据,所以呢,我们通常会写一个什么叫global data,那么对应的是一个对象。嗯,我们可以把数据保存在这里。保存在整个应用的实力身上有什么好处呢?页面的销毁。跟我这个应用。数据没有关系,我这儿的数据肯定在什么时候不在呢,什么时候重新初始化呢,除非。整个应用重新加载,那就是说用户比如说退出我们的小程序了,他下一次重新访问。
05:01
啊,那这样的话你能退出再重新问了那个音频,这已经无所谓了,对吧。嗯,没有问题,好的,那现在啊,在这个里边。我们要思考,我们要往这里边从什么数据才能证明某一个页面的音乐在播放,或者叫某一首音乐在播放。想想。首先音乐再播放,我们肯定得整一个标识。是否在播播放对吧,比如说我们来个music play。嗯,为触啊,就是播放,为放就未播放,那这个状态好解决,关键是你还要考虑周全一点啊,我们光有一个是否播放的状态不够。因为啥呢?那我们有这么多歌曲,我是不是得标识一下到底是哪一首歌曲在播放呀?如何能标识某一首音乐呢?哎,对,我们可以通过什么呀,音乐ID。
06:03
你每一首音乐是不是有自己的标识呀,好的,那这个时候呢,大家看啊,我在全局这呢,我初始化两个数据,一个叫is music play,嗯,同时呢,我们再来一个叫music ID吧。为空串。哎,为空串,那这两个注意我这故意叫is music play啊,为的是跟我们页面这个in play区分开。现在呢,我们是在全局通过一个标识去标识我们的音乐。那这呢是标识是否有音乐在播放,而下边呢,这个是用来去标识我们的音乐ID。好的,那么初始化完了以后。来在我们详情页,我肯定是要操作这个实例的,所以呢,我们上来先去干嘛去获取我们全局的实例。嗯,Cos一个啊APP啊吧,我们也同它官网一样啊,等于什么get一个APP,我们拿到这个实例。
07:09
那么接下来呢,当我们音乐要播放的时候,我是不是要把全局这个状态修改一下。对吧,我要把我的状态的声明到全局吧。那么如何去操作全局data中的数据呢?这比较简单啊,那就是对象点属性直接去修改,不需要什么set data。好,那大家琢磨琢磨,我们什么时候要修改这个状态?比如说我进去某一首音乐。比如说练习。我一进来这个页面,我需要修改全局的状态吗?并不需要,只有我在点击播放这一首音乐的时候。我是不是要声明一下。对吧?来声明什么啊,我练习这首歌在播放。
08:05
那么等到我有可能到别的医院。那我如果再点击播放呢?那这个时候我是不是要再次声明,好,当前是我情书这首音乐在播放呀。对了吧。嗯,也就是说我们需要在播放的时候去修改这个状态,或者叫声明全局的播放状态。我怎么知道我在播放呢,哎,别忘了刚才在onload里边咱们是不是有接听呀。如果你是播放,那么我们去干嘛去修改这个全局。来播放音乐的,播放的状态怎么修改呢?app.global data。点,哎,首先呢,我们要将这个music play呢,肯定置为处了。同时你别忘了,你还得声明是你的音乐,那这个时候呢,我们应该把这个music ID呢,修改成我们当前音乐的ID。
09:07
就是它呗,因为都在里面啊,所以我可以访问到这个变量,那我就直接用了。好的,那这个是播放的时候我们要修改。那你想想看,你播放修改了目的是啥?目的是为了下一次页面重新加载,再次的时候我们上来是不是要判断。里面的状态是不是我当前页面的状态啊。那这个时候大家想想看,我们暂停和停止之处要不要再次修改?要不要再次修改,再次修改那就是把这个状态要置为false呀。啊,必须要修改啊,如果你不修改的话会有问题,那么全局。是否播放的状态一直为错,意味着他认为一直有音乐在播放,那肯定不对呀。对吧,所以在暂停和停止的时候,我也把这个拿过来啊,那这个这两个里面呢,这是不是要置为false。
10:07
这。那暂停停止的时候有问题了啊,你觉得这两行代码我们用不用执行。来,就是修改音乐ID的代码。啊,其实在这儿是不需要的,为什么呢?大家思考一个问题啊,我们能够暂停或者停止之前。是不是意味着肯定播放过?你一首音乐肯定是先有播放才有可能有。暂停和停止吧。对的吧,啊,才有可能有暂停和停止。嗯,那我们在播放的时候,我们是不是已经修改了这个音乐的ID了,所以这里不需要。不需要。啊,要会过日子啊,该审的就得审。那这样的话,我们再看啊,你会发现这一行代码。那这一行代码。是不是又重复了,所以对应的这行代码呢,我们也应该放到我们放到这个修改状态的这个功能函数中。
11:09
来撤销一下啊,放到哪了,放到这个。我给它放到哪,放到这儿。复制一份。放到这里,那这是不是也应该是个变量,而且这个变量是否播放的状态是不是跟我们页面的状态要保持一致。所以这应该是play就好了。那对应的这个还要吗?不要了,这个也不要了,那这个也不用了,因为啥呢,都在这里面了。啊,对应的这个注释呢,我就给它删掉了啊。哎,这儿是不是还有一行。单飞的代码注意啊,这一行代码呢,它不是重复的代码。所以呢,我就不动了,我就给它放到外边了。好的,那现在啊,我们已经动态的去修改了全局这个状态。那肯定没问题了。那现在呢,我们看不到啊,因为APP电塔中呢,是不给我们显示全局的状态的。
12:04
所以呢,没有办法给他也是啊,如果真想看的话也简单,你们直接去打印一下这个实例就好了。那在这呢,我们就不浪费时间了啊,那修改了全局的音乐ID和播放状态以后。我们的目的是啥?目的是为了页面下一次再进来的时候,我们是不是要赶紧判断一下,诶,我当前的页面音乐有没有在播放。如果不播放,那我就啥也不管了,还是放。对吧,如果再播放,我们是不是要把这个指为处呀。嗯,没有问题吧,好的,那。我们在在哪呀,我们在这个之前吧,在这儿啊,我们去干嘛去判断我们当前页面的音乐。啊,是否在啊播放注意啊,我的行为呢,还是在里面,因为你越早判断越好。我判断完,我如果真的在播放,我把这个状态一修改为true,用户就可以看到了。
13:03
对吧,啊越早越好,这个呢是为了显示给用户看的。好的,那如何判断当前的页面音乐再播放呢?哎,条件判断,首先我们要保证啊,全局的global data中的这个is music play必须为。才能说明有音乐在播放。注意啊,我强调了才能说明有音乐在播放,但是能说明是哪一首音乐吗?并不能,那这个时候呢,我怎么知道是不是我当前页面的音乐呢?我们可以通过音乐ID去判断,那这个时候呢,它还应该有个条件,那就是全局,我们之前播放的时候,从进去的音乐ID如果说和我当前页面的ID一样,那这样的话是不是就能说明是我当前页面的音乐在播放呀?啊,如果这两个条件都满足,那在这儿我们要干嘛?
14:03
呃,修改这个当前页面。嗯,哎,修改当前页面的这个音乐播放。啊,状态为true对吧,嗯,就点set一个data,他们那这呢ISA play对吧,为true就好了。没处就好了。好的,那就是这个啊,没有问题。嗯,那那现在呢,我们看一下最终的效果啊过来。假设啊,我现在来到练习。嗯,走。嗯,没问题,来练习,我去播放。好的,我们后退,我们再进行练习,先看有没有问题。嗯,进来是不是还是播放啊,他赶紧给我修改成播放了,没有问题,那我们后退换一个,我换成情书这个走。
15:01
大家看这是被播放是对的,那假设啊,用户过来说,哎,我想听情书这首歌了,那么我一点击情书的。走。这个时候要注意啊,他是会播放情书的歌曲了。嗯,如果听过的小伙伴啊,肯定知道啊,这是比较经典的一首歌,叫情书。OK啊,我把声音关掉,那么这样的话。上一首音乐呢,就自动被停掉了,那这个时候呢,我们后退,我们看一下这个练习。好,这个时候大家看练习就是为模范了,因为啥呢?因为现在全局从的是把我们情书的。音乐的ID啊,你只要点了它就是它,那这个时候你看我我们回到起初它呢,还是播放的状态。哎,没有问题,那这一节课呢,我们主要是解决这个啊,后退,嗯,页面销毁的时候如何去保存我们页面的播放状态到一个公共的地方,那这一节课呢,我们引入一个新的知识点啊,就是可以在全局。
16:06
啊,往global data里面去初始化数据,并且呢,在我们所有的页面里面啊,其实都可以拿到页面的实例,进而去让他去操作它。哎,去操作它。好的,那这节课呢,我们先讲到这里。
我来说两句