文章目录 一、学习目标1、掌握swiper组件、scroll-view组件的使用2、掌握image组件的使用3、掌握音频API的使用4、掌握slider组件的使用 二、开发前的准备1
tab导航栏
content内容区
player音乐播放控件
开发者工具创建空白项目:
{"pages:["pages/index/index"]}
“navigationBarBackgroudColor”:"#fff,
“navigationBartitletext”:“音乐,”
“navigationBarBackgroudColor”:“black”,
标签页和页面info.wxml、play.wxml、palylist.wxml
swiper组件编写滑动页面结构
0 1 2
swiper组件编写滑动页面结构index.wxml:
< swiper-item item-id="a">
swiper组件编写滑动页面结构index.wxss:
image{width:100%;}
include主要用途:
1、将代码拆分到多个文件中,可以更方便地查找代码。
2、将代码公共部分抽取出来。通过外部文件引入。
音乐推荐
音乐推荐< /view>{tab== 1? actie':"}}" bindtap=”changeItem”data-item="1" >播放器< /view>{tab== 2? actie':"}}" bindtap=”changeItem”data-item= "2" >播放列表< /view>< /view>
页面和样式:
tab导航效果:
play info< /view> playlist
实现标签页切换
单击导航栏选项卡实现标签页切换:
音乐推荐< /view>changeltem: function(e) {this.setData({item: e.target.dataset.item,tab:e.target.dataset.item}},
标签页切换样式
.tab -item.active {color: #c25b5b;border- bottom-color: #c25b5b;
< swiper current= "{item}" bindchange="changeTab"> < swiper- item> < swiper- item> < swiper- item>
change Tab: function(e) {this.setData({tab: e.detail.current.tab-item.active {color: #c25b5b;border- bottom-color: #c25b5b;}
< scroll-view scroll-x scroll-y style="height:200px" bindscroll- "scroll"> scroll: function(e) {console.log(e.detail)},
内容区域滚动
< scroll-view class= "content-info" scroll-y> 已到达底部< /view>< /scroll-view>
私人FM
.content-info-portal { display: flex; margin-bottom: 15px;}.content-info-portal > view { flex: 1; font-size: 11pt; text-align: center;}.content-info-portal image { width: 120rpx; height: 120rpx; display: block; margin: 20rpx auto;}
推荐歌曲 紫罗兰
热门音乐
.content-info-list > .list-inner > .list-item { flex: 1;}.content-info-list > .list-inner > .list-item > image { display: block; width: 200rpx; height: 200rpx; margin: 0 auto; border-radius: 10rpx; border: 1rpx solid #555;}.content-info-list > .list-inner > .list-item > view { width: 200rpx; margin: 10rpx auto; font-size: 10pt;}
{{play.title}} {{play.singer}}
.player { display: flex; align-items: center; background: #222; border-top: 1px solid #252525; height: 112rpx;}.player-cover { width: 80rpx; height: 80rpx; margin-left: 15rpx; border-radius: 8rpx; border: 1px solid #333;}
.player-info { flex: 1; font-size: 10pt; line-height: 38rpx; margin-left: 20rpx; padding-bottom: 8rpx;}.player-info-singer { color: #888;}.player-controls image { width: 80rpx; height: 80rpx; margin-right: 15rpx;}
var audioctx = wx.createInnerAudioContext();
onReady: function() {var audioCtx = wx.createInnerAudioContext(audioCtx.src = htt.:/....x.o.audioCtx.onPlay(function() {console.log('开始播放')})...},
sliderChanging:function(e){console.log(e.detail.value)},
playlist: [{ id: 1, title: '钢琴协奏曲', singer: '肖邦', src: 'Http://localhost:3000/1.mp3', coverImgUrl: '/images/cover.jpg' },
音乐播放逻辑代码:
audioCtx: null, onReady: function() { this.audioCtx = wx.createInnerAudioContext() // 默认选择第1曲 this.setMusic(0) var that = this // 播放进度检测 this.audioCtx.onError(function() { console.log('播放失败:' + that.audioCtx.src) }) // 播放完成自动换下一曲 this.audioCtx.onEnded(function() { that.next() }) // 自动更新播放进度 this.audioCtx.onPlay(function() {}) this.audioCtx.onTimeUpdate(function() { that.setData({ 'play.duration': fORMatTime(that.audioCtx.duration), 'play.currentTime': formatTime(that.audioCtx.currentTime), 'play.percent': that.audioCtx.currentTime / that.audioCtx.duration * 100 }) }) // 格式化时间 function formatTime(time) { var minute = Math.floor(time / 60) % 60; var second = Math.floor(time) % 60 return (minute < 10 ? '0' + minute : minute) + ':' + (second < 10 ? '0' + second : second) } }, // 音乐播放 setMusic: function(index) { var music = this.data.playlist[index] this.audioCtx.src = music.src this.setData({ playIndex: index, 'play.title': music.title, 'play.singer': music.singer, 'play.coverImgUrl': music.coverImgUrl, 'play.currentTime': '00:00', 'play.duration': '00:00', 'play.percent': 0 }) },
{{play.title}} {{play.singer}}
底部播放器的样式代码:
.player { display: flex; align-items: center; background: #222; border-top: 1px solid #252525; height: 112rpx;}
next: function() { var index = this.data.playIndex >= this.data.playlist.length - 1 ? 0 : this.data.playIndex + 1 this.setMusic(index) if (this.data.state === 'running') { this.play() } },
{{play.title}} —— {{play.singer}} ——
{{play.title}} —— {{play.singer}} —— {{play.currentTime}} {{play.duration}}
.content-play { display: flex; justify-content: space-around; flex-direction: column; height: 100%; text-align: center;}.content-play-info > view { color: #888; font-size: 11pt;}
onReady: function() { this.audioCtx = wx.createInnerAudioContext() // 默认选择第1曲 this.setMusic(0) var that = this // 播放进度检测 this.audioCtx.onError(function() { console.log('播放失败:' + that.audioCtx.src) }) // 播放完成自动换下一曲 this.audioCtx.onEnded(function() { that.next() })
< sliderbindchange= "sliderChange"activeColor= " #d33a31 block- size=”12"backgroundColor= " #dadada"value= "{{play.percent}}" />
sliderChange: function(e) {var second = e.detail.value*this.audioCtx.duration / 100this.audioCtx.seek(second)},
控制进度条的长度控制歌曲播放进度:
{{item.title}} {{item.singer}} 正在播放
.playlist-item {display: flex;align-items:center;border- bottom: 1rpx solid #333;height: 112rpx;}...
change:function(e){this.setMusic(e.currentTarget.dateset.index)this.play()},
来源地址:https://blog.csdn.net/py20010218/article/details/128263602
--结束END--
本文标题: 微信小程序中实现——【音乐播放器】
本文链接: https://www.lsjlt.com/news/405659.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0