切换上下首音乐
思路:
切换歌曲,实际上是切换歌曲的id,歌曲的详情页只有当前播放歌曲的id,所以要想更新音乐的id得去每日推荐的列表页更新,切换歌曲有两种情况,一个是上一首,一个是下一首,可以绑定在一个事件上面,指定id标识上一首或者下一首,然后把类型传到列表页中去

songDetail.wxml

<text class="iconfont icon-shangyishoushangyige" id="pre" bindtap="handleSwitch"></text><text class="iconfont icon-xiayigexiayishou" id="next" bindtap="handleSwitch"></text>

把切换的类型传到每日推荐列表页去(利用消息订阅与发布)

songDetail.js

  // 点击切换歌曲的回调handleSwitch(event){// 获取切换歌曲的类型let type=event.currentTarget.id// 将切换歌曲的类型发送给recommendSong页面PubSub.publish('switchType',type)},

recommend.js中根据不同类型的条件进行更新相应的musicId
1)首先先订阅消息,接收到切换的类型
2)获取点击歌曲的索引(使用data-index=“{{index}}”进行获取)小程序进行循环遍历的时候,有自定义的index,在这里我们直接使用就行

<view bindtap="tosongDetail" data-song='{{item}}' data-musicid="{{item.id}}"  data-index="{{index}}" class="listItem" wx:for="{{recommendList}}" wx:key="id"><image src="{{item.al.picUrl}}"></image><view class="musicInfo"><text>{{item.name}}</text><text>{{item.ar[0].name}}</text></view><view class="iconfont icon-gengduo"></view>
</view>

3)使用路由跳转到歌曲详情页的时候需要根据点击的歌曲进行更新索引,在这之前,我们可以在data中定义一个index用来保存索引,然后根据具体情况进行更新
recommendSong.js

// 跳转至songDetail的回调tosongDetail(event){let {song,musicid,index}=event.currentTarget.datasetconsole.log(song)// 更新记录点击音乐的下标this.setData({index})// 路由跳转传参可以使用query的形式wx.navigateTo({// url: '/pages/songDetail/songDetail?song='+JSON.stringify(song),url: '/pages/songDetail/songDetail?musicId='+musicid,})},

4)在onload监听中根据recommendSong.js歌单推荐页通过消息订阅收到的歌曲详情页切换歌曲的类型,我们进行索引更新,同时根据歌曲的索引(需要进行临界值判断),获取歌曲对应的musicId,把musicid通过消息订阅与发布给歌曲详情页传过去
recommendSong.js

// 订阅songDetail发布的type消息 第一个参数是消息名,第二个参数才是收到的数据PubSub.subscribe('switchType',(msg,switchType)=>{let {recommendList,index}=this.dataif (switchType==='pre') {//上一首(index===0) && (index=recommendList.length)index-=1}else{//下一首(index===recommendList.length-1) && (index=-1)index+=1}let musicId=recommendList[index].id// 更新index状态this.setData({index})// 将最新的musicId发送给songDetailPubSub.publish('musicId',musicId)})

5)在songDetail中根据每日推荐列表页传过来的音乐id进行更新,同时切换的时候需要自动播放当前的音乐(也需要在onLoad监听中,防止重复加载)
songDetail.js

// 订阅recommendSong页面发布的消息:musicIdPubSub.subscribe('musicId',(msg,musicId)=>{// 获取最新的音乐详情数据this.getMusicInfo(musicId)// 自动播放当前音乐this.musicControl(true,musicId)})

切换上下首音乐功能的实现(消息订阅与发布的使用)相关推荐

  1. mqttnet+emqx实现消息订阅与发布

    mqttnet+emqx实现消息订阅与发布 1 在Windows操作系统下使用EMQX 1.1 部署前准备 首先进入官网https://www.emqx.io/zh/downloads?os=Wind ...

  2. 【Vue2.0】— 消息订阅与发布pubsub(二十)

    [Vue2.0]- 消息订阅与发布pubsub(二十)

  3. 小程序中消息订阅与发布

    注:小程序中最好不要在开发工具里面使用命令行安装,最好使用外部的 1)首先要在项目中初始化一个package.json用来存放包 npm init 2)下载安装要使用的包,这里是要使用消息订阅与发布 ...

  4. Vue(组件间通信:props、自定义事件、全局事件总线、消息订阅与发布)

    一.props props不仅可以实现父给子传递信息,还可以进行子给父传递信息 1.父给子传递信息: 父组件中给子组件实例传递信息 子组件利用props进行接收组件传递信息(接收方式有三种:数组.对象 ...

  5. Vue学习之--------消息订阅和发布、基础知识和实战应用(2022/8/24)

    文章目录 1.基础知识 2.代码实例 2.1 main.js 2.2 School.vue 2.3 Student.vue 2.4 App.vue 3.全局事件总线通信改为消息的订阅和发布 3.1 核 ...

  6. ESP32的MQTT AT固件烧录+STM32以ESP32的MQTT AT固件的AT指令连接EMQX下mqtt服务器实现消息订阅和发布

    目录 写在前面 三种方案(利用ESP32连接EMQX下的MQTT) 步骤 ESP32烧录固件并AT指令进行测试. 下载固件 烧录工具下载 烧录固件(选择ESP32) 关于AT 指令与MQTT服务器断开 ...

  7. php redis消息订阅与发布_PHP使用Redis实现订阅发布与批量发送短信

    原标题:PHP使用Redis实现订阅发布与批量发送短信 1 什么是redis订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.直接点, ...

  8. mysql消息订阅与发布_消息发布与订阅

    代码示例 消息发布者 (即publish client) package message.kvstore.aliyun.com; import redis.clients.jedis.Jedis; p ...

  9. php redis消息订阅与发布_php+redis 实现发布订阅功能

    前言 redis可以实现发布订阅和消息队列的功能.两者的区别在于订阅者可以是多个,且可以同时处理发布上来的消息,如果订阅者不在线(服务没有启动)消息将丢失,消息没有持久化.发布和订阅是一块执行的,缺少 ...

最新文章

  1. javascript 正则表达式详解
  2. Python 代码性能优化技巧
  3. java例程练习(布局管理器[FlowLayout])
  4. MVC基础知识-View
  5. jvm调试工具_调试JVM
  6. Android编程获取手机型号,本机电话号码,sdk版本及firmware版本号(即系统版本号)...
  7. [css] 你有使用过字体图标吗?它有什么好处?
  8. cocos2d for android,cocos2d-x for android
  9. 负反馈放大电路实验报告
  10. 让你对DC完全了解的88条名词解释(转)
  11. 软件测试过程中的文档内容
  12. 浙江大学 PTA 递归实现顺序输出整数
  13. This National Puppy Day
  14. 前端项目,看我在这里管理全局后台初始化的数据,就问你飒不飒?
  15. XOR World(异或运算)
  16. 【23】SCI易中期刊推荐——神经网络科学及机器人学(中科院3区)
  17. 字符编码:Unicode和UTF-8之间的关系
  18. 怎么用几何画板制作线段式控制杆
  19. python例子下载_python例子下载
  20. SVG阴影、渐变,文字

热门文章

  1. 如何使用OpenDNS有效解决DNS域名劫持?
  2. Excel VBA MD5 加密 16位 32位
  3. python爬虫——爬取淘票票正在热映电影
  4. CCleaner软件自定义清理设置
  5. 2019 年天津科技大学电子设计竞赛:算法与策略-----B题
  6. 【JAVA】-- 多线程(线程让步yield、线程插队join)
  7. 软考备考----数字签名、特洛伊木马、音频信号范围、著作权法
  8. Incorrect column count: expected 1, actual 5
  9. Java---点名---最简
  10. C语言调用so动态库的两种方式