前言

需求来了:现需要一个选择音乐的列表,因为数据较多采取异步加载,需要有试听功能。稍加思索作出如下页面(样式简陋大家仅供参考哈)。

api参考微信开放文档:https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.html

一、页面部分

首页实现又上角的音乐播放暂停按钮:

创建一个圆形的小音乐图标定位到页面的右上角用css动画让他旋转起来暂停效果我们用css的animation-play-state来实现paused表示动画已暂停running表示动画正在播放。(具体样式参考下方)

<view class="circle" style="border:3px solid rgba(0,0,0,0.15);position:fixed;right:5px;top:3px;z-index:298"><view class='xb xb-allc circle' style='width:34px;height:34px;background:rgba(0,0,0,0.65);'><image class="xb imgrotate_common" mode="aspectFill" style="width:11px;height:23px;animation-play-state:{{palycover?'running':'paused'}}" bindtap='coverbind'src="https://sxzimgs.oss-cn-shanghai.aliyuncs.com/yingxiao/page/6156ea6c-9ca5-11e9-9a54-00163e04cc20.png"></image></view></view>

这里的抽屉效果我们采用css的transition加js实现
主体列表实现

  <view wx:for="{{muscie}}" wx:key="index"class="{{index < muscie.length-1 && 'BB-1-e6'}} FS-16_r transition4 line-20_r h45 bs-bx ofH" data-index="{{index}}"data-item="{{item}}" bindtap="select" style="{{selectIndex == index?parse.height(item.length):''}}"><view class="dis_f ai_c jc_sb h45">{{item.value}}<image wx:if="{{item.subset}}" style="width:32rpx;height:18rpx;"src="https://sxzimgs.oss-cn-shanghai.aliyuncs.com/yingxiao/page/d20ce6f4-7b41-11eb-a847-00163e04cc20.png"></image><image wx:if="{{!item.subset && musice_uuid==item.value}}"src="https://sxzimgs.oss-cn-shanghai.aliyuncs.com/yingxiao/page/a792d5c4-7bcc-11eb-a847-00163e04cc20.png"style="width:32rpx;height:22rpx;"></image></view><block wx:if="{{selectIndex == index}}"><view wx:for="{{item.subset}}" data-item="{{subsetItem}}" catchtap="selectMusice" hover-class="weui-cell_active"class="dis_f ai_c jc_sb h45 FC-gray2" wx:for-item="subsetItem" wx:key="index">{{subsetItem.name}}<image wx:if="{{musice_uuid==subsetItem.uuid}}"src="https://sxzimgs.oss-cn-shanghai.aliyuncs.com/yingxiao/page/a792d5c4-7bcc-11eb-a847-00163e04cc20.png"style="width:32rpx;height:22rpx;"></image></view></block></view>

在wxml页面写一个wxs用于改变高度:

<wxs module="parse">module.exports = {height: function (length) {var style = ''var num = 90 * length + 90style += "height:" + num + "rpx;"return style}}
</wxs>

部分样式参考:

.transition4 {webkit-transform: translateZ(0);-moz-transform: translateZ(0);-ms-transform: translateZ(0);-o-transform: translateZ(0);transform: translateZ(0);transition: all .3s;
}
.FS-16_r {font-size: 32rpx!important;
}
.line-20_r {line-height: 40rpx;
}
.ofH {overflow: hidden;
}
.BB-1-e6 {border-bottom: 1px solid #E6E6E6;
}
.h45 {height: 90rpx;
}
@-webkit-keyframes changeright{       0%{-webkit-transform:rotate(0deg);}50%{-webkit-transform:rotate(180deg);}100%{-webkit-transform:rotate(360deg);}
}
.imgrotate_common{-webkit-animation:changeright 6s linear infinite;
}

二、js部分

这里我们首先再onLoad 里判断进入此页面前是否已经选择好音乐,如果已经选好则展开相应列表并播放音乐(参考下方onLoad 部分)。
因为这里采取的是异步请求的方式所以列表数组页面加载时并无数据,我们这里在用户展开相应列表时获取数据(参考下方select()和getMusicList()部分),如果无需异步请求数据则省略getMusicList的请求 部分。
选择音乐时把数据存储到上个页面,这里需判断是否选择的是正在播放的音乐,如果是则暂停播放否则播放相应音乐(参考下方selectMusice()部分)
当然这里一定要在页面销毁和隐藏时停止音乐播放。

代码参考:

  /*** 页面的初始数据*/data: {muscie: [{value: '网络流行',type: 'wangluo',subset: []},{value: '节日庆典',type: 'jieri',subset: []},{value: '中外乐器',type: 'yueqi',subset: []},{value: '欢快儿童',type: 'ertong',subset: []},{value: '其他音乐',type: 'other',subset: []},], // 音乐列表palycover: false, // 播放状态selectIndex: null,  // 选中音乐类型indexmusice_uuid: '' // 音乐id},onLoad: function (options) {let form = $.parentData().form// 创建内部 audio 上下文 InnerAudioContext 对象。this.InnerAudioContext = wx.createInnerAudioContext()this.setData({musice_uuid: form.musice.uuid || null})form.musice.category && this.getMusicList(form.musice.category, form.selectIndex, form.musice.url)},/*** 活动背景音乐列表*/getMusicList(qcategory = "", index, url) {let {muscie} = this.datalet filter = muscie.filter((item) => {return item.type === qcategory})[0].subset.length// 选中为当前展开列表停止请求if (filter > 0) {this.setData({selectIndex: index,})return}$.get("/activity/music/list", {qcategory}, (res) => {muscie.map(item => {if (item.type === qcategory) {item.subset = res.dataitem.length = res.data.length}})url && this.play_bgm(url)this.setData({muscie,palycover: url ? true : this.data.palycover,selectIndex: index,})})},/*** 展开列表*/select(e) {let {index,item} = $.data(e)let {selectIndex,} = this.dataif (selectIndex == index) {index = null}this.getMusicList(item.type, index)},/*** 选择音乐*/selectMusice(e) {let musice_uuid = $.data(e).item.uuid$.parent().form.musice = $.data(e).item$.parent().form.selectIndex = this.data.selectIndex// console.log(JSON.stringify($.data(e).item))if (this.data.musice_uuid === musice_uuid) {this.coverbind()} else {this.play_bgm($.data(e).item.url)this.setData({palycover: true,})}this.setData({musice_uuid})},// 暂停音乐coverbind() {let InnerAudioContext = this.InnerAudioContextif (this.data.palycover == true) {InnerAudioContext.pause()this.setData({palycover: false})} else {InnerAudioContext.play()this.setData({palycover: true})}},// 播放音乐play_bgm(src) {let InnerAudioContext = this.InnerAudioContextInnerAudioContext.autoplay = trueInnerAudioContext.src = srcInnerAudioContext.onPlay(() => {})InnerAudioContext.onStop(() => {})InnerAudioContext.onEnded(() => {InnerAudioContext.play()})InnerAudioContext.onError((res) => {})},stop_audio() {if (this.InnerAudioContext) {let InnerAudioContext = this.InnerAudioContextInnerAudioContext.stop()}},onHide() {this.stop_audio()},onUnload() {this.stop_audio()},

微信小程序音乐播放列表相关推荐

  1. 微信小程序音乐播放器

    趁周末做一个简单的微信小程序音乐播放器,源码已留. 播放列表首页wxml <swiper class="swiper" indicator-dots='{{swipterSe ...

  2. 微信小程序——音乐播放器

    音乐播放器 前言 主页 三个标签页 推荐页 播放器页 播放列表页 逻辑 前言 使用swiper组件完成三个标签页的切换,并且实现轮播图.scroll-view组件完成滚动视图,使用微信小程序提供的音乐 ...

  3. (附源码)springboot+基于微信小程序音乐播放器的设计与实现 毕业设计271156

    Springboot音乐播放小程序的设计与实现 摘 要 本文设计了一种基于微信小程序的音乐播放器,系统为人们提供了方便快捷.即用即搜的音乐搜索播放服务,包括音乐资讯.音乐库推荐.交流论坛.注册登录.最 ...

  4. 微信小程序-音乐播放器

    前言 本文主要通过微信小程序的媒体API来实现一个简单的音乐播放器,主要实现的功能有音乐的切换.单曲循环.播放进度条的拖拽.播放与暂停和自定义音乐列表弹窗功能. 效果图 主要目录文件 |--image ...

  5. springboot+基于微信小程序音乐播放器的设计与实现 毕业设计-附源码271156

    Springboot音乐播放小程序的设计与实现 摘 要 本文设计了一种基于微信小程序的音乐播放器,系统为人们提供了方便快捷.即用即搜的音乐搜索播放服务,包括音乐资讯.音乐库推荐.交流论坛.注册登录.最 ...

  6. 微信小程序 音乐播放控件,监听播放事件, 音乐播放的基本实现

    下面我将会为大家初步讲解利用微信小程序的音乐控件制作音乐播放器,以及会遇到的一些问题,最后会附上源码包喔! 图片以及音乐都必须使用网络链接体 播放器 播放之后闪退,是因为音乐的链接失效了所以 闪退 监 ...

  7. 基于hbuilder开发的微信小程序音乐播放系统,可添加本地音乐(含源码)

    可用hbuilder开发工具直接打开微信小程序,可直接运行,不需要调试,可直接使用.播放设置.下一首.上一首.暂停按键.播放列表等功能! 安装教学视频: 请点击!!! 源码下载地址:请点击>&g ...

  8. 01. 微信小程序音乐播放器

    项目简介 最近在学微信小程序,所以打算做一个音乐播放器的微信小程序. 项目需求(原型图) 这个是我做的原型图,比较简陋(有些界面直接用了网易云音乐小程序的截图,因为是仿着网易云音乐来做的) 首页 播放 ...

  9. 计算机实战项目、毕业设计、课程设计之含论文+辩论PPT+源码等]微信小程序音乐播放器小程序+后台管理系统

    音乐播放器平台+后台管理系统|前后分离VUE>该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 本系统包含微信小程序前台和Java做的后台管理系统,该后台采用前后台前后分离 ...

最新文章

  1. c语言中平均值用什么表示_学C语言有什么用?
  2. 最新:2022校友会中国大学排名发布!
  3. plsql与java_Oracle之PLSQL与Java应用
  4. 推荐一个高质量的git命名查询和学习的github仓库git-recipes
  5. android 更改edittext内容,Android如何实时更改edittext的内容
  6. java转换为字符串_java – 如何从int转换为字符串?
  7. SinglepassTextCluster项目:基于single-pass算法思想的自动文本聚类组件
  8. caffeine 4hash lfu频度记录
  9. EOS.IO技术学习
  10. fastDFS 命令笔记
  11. IO流 (二) ----- 文件流
  12. Atitit 四种自动机 fsm pda 目录 1. 自动机可分为有限自动机、后进先出自动机、线性有界自动机、图灵机等几种。它们对语言的识别能力各不相同。 2 1.1. 抽象自动机的理论。 2 1.
  13. 以30字符宽居中输出python字符串_从零开始学 Python 之字符串
  14. error:LNK2005 已经在*.obj中定义
  15. 怎么用计算机解方程,计算器怎么解方程
  16. 可变模糊集理论matlab程序,可变模糊集理论.pdf
  17. 从yesno模型入门kaldi语音识别
  18. 网络基础该从哪开始补?这36张图,一次性理清
  19. 动态修改spine动画渲染层次
  20. 如果你爱或者恨一个人[转]

热门文章

  1. 平安科技从 Oracle 迁移到 UbiSQL 的实践
  2. Gerrit的安装和配置个人经验总结
  3. 空气源热泵如何实现远程集中管理的
  4. 大数据核心技术是什么
  5. GPL协议与MIT开源协议的异同
  6. 2021年广东省安全员A证第三批(主要负责人)考试总结及广东省安全员A证第三批(主要负责人)试题及解析
  7. RPO 相对路径覆盖攻击
  8. eNSP基础命令_01
  9. Docker查看正在运行的容器创建时的命令
  10. C# FileInfo类:文件操作