微信小程序:音乐播放器(附源码)

news/2024/11/17 5:55:26/

效果图:

在这里插入图片描述

代码实现:

index.js代码:

Page({/*** 页面的初始数据*/data: {item:0,tab:0,// 播放器列表数据playlist:[{id:1,title:"晴天",singer:'周杰伦',src:'http://localhost:3000/1.mp3',converImgUrl:'../images/yhm.png'},{id:2,title:"反方向的钟",singer:'周杰伦',src:'http://localhost:3000/2.mp3',converImgUrl:'../images/yhm.png'},{id:3,title:"兰亭序",singer:'周杰伦',src:'http://localhost:3000/3.mp3',converImgUrl:'../images/yhm.png'},{id:4,title:"青花瓷",singer:'周杰伦',src:'http://localhost:3000/4.mp3',converImgUrl:'../images/yhm.png'},{id:5,title:"本草纲目",singer:'周杰伦',src:'http://localhost:3000/4.mp3',converImgUrl:'../images/yhm.png'},{id:6,title:"爱在西元前",singer:'周杰伦',src:'http://localhost:3000/4.mp3',converImgUrl:'../images/yhm.png'},{id:7,title:"花海",singer:'周杰伦',src:'http://localhost:3000/4.mp3',converImgUrl:'../images/yhm.png'},{id:8,title:"半岛铁盒",singer:'周杰伦',src:'http://localhost:3000/4.mp3',converImgUrl:'../images/yhm.png'},{id:9,title:"轨迹",singer:'周杰伦',src:'http://localhost:3000/4.mp3',converImgUrl:'../images/yhm.png'},{id:10,title:"搁浅",singer:'周杰伦',src:'http://localhost:3000/4.mp3',converImgUrl:'../images/yhm.png'}],state:'paused',playIndex:0,play:{currentTime:'00:00',duration:'00:00',percent:0,title:'',singer:'',// converImgUrl:'../images/cover.jpg'coverImgUrl:'../images/yhm.png'}},audioCtx:null,changeItem(e){this.setData({item : e.target.dataset.item})},changeTab(e){this.setData({tab:e.detail.current})},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function () {this.audioCtx = wx.createInnerAudioContext();this.setMusic(0);},setMusic(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: function() {this.audioCtx.play();this.setData({state: 'running'})},// 暂停pause: function () {this.audioCtx.pause();this.setData({state: 'paused'});},// 下一曲next: function() {var index = this.data.playIndex >= this.data.playlist.length - 1 ? 0 : this.data.playIndex + 1this. setMusic(index)if (this .data.state == 'running') {this.play()}},/*** 生命周期函数--监听页面显示*/onShow: function () {},/*** 生命周期函数--监听页面隐藏*/onHide: function () {},/*** 生命周期函数--监听页面卸载*/onUnload: function () {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function () {},/*** 页面上拉触底事件的处理函数*/onReachBottom: function () {},/*** 用户点击右上角分享*/onShareAppMessage: function () {}
})

index.wxml页面:

<!-- 顶部 -->
<view class="tab"><view class="tab-item {{tab == 0 ? 'active' : ''}}" bindtap="changeItem" data-item="0">音乐推荐</view><view class="tab-item {{tab == 1 ? 'active' : ''}}" bindtap="changeItem" data-item="1">播放器</view><view class="tab-item {{tab == 2 ? 'active' : ''}}" bindtap="changeItem" data-item="2">播放列表</view>
</view>
<!-- 播放器 -->
<view class="content"><swiper current="{{item}}" bindchange="changeTab"><swiper-item><include src="info.wxml"/></swiper-item><swiper-item><include src="play.wxml"/></swiper-item><swiper-item><include src="playlist.wxml"/></swiper-item></swiper>
</view>
<!-- 底部播放器 -->
<view class="player"><image class="player-cover" src="{{play.coverImgUrl}}" /><view class="player-info"><view class="player-info-title">{{play.title}}</view><view class="player-info-singer">{{play.singer}}</view></view><view class="player-controls"><!--切换到播放列表--><image src="../images/01.png" bindtap="changePage" data-page="2" /><!--播放或暂停--><image wx:if="{{state == 'paused'}}" src="../images/02.png" bindtap="play" /><image wx:else src="../images/02stop.png" bindtap="pause" /><!--下一曲--><image src="../images/03.png" bindtap="next" /></view>
</view>

info.wxml页面:

<!-- 轮播图 -->
<scroll-view class="content-info" scroll-y><swiper class="content-info-slide" indicator-color="rgba(255,255,255,.5)" indicator-active-color="#fff" indicator-dots circular autoplay><swiper-item><image src="../images/banner.jpg"/></swiper-item><swiper-item><image src="../images/banner.jpg"/></swiper-item><swiper-item><image src="../images/banner.jpg"/></swiper-item></swiper><!-- 功能按钮 --><view class="content-info-portal"><view><image src="../images/04.png"/><text>私人FM</text></view><view><image src="../images/05.png"/><text>每日歌曲推荐</text></view><view><image src="../images/06.png"/><text>云音乐新歌榜</text></view></view><view class="content-info-list"><view class="list-title">推荐歌曲</view><view class="list-inner"><view class="list-item"><image src="../images/mjz.png"/><view>稻香</view></view><view class="list-item"><image src="../images/qlx.png"/><view>七里香</view></view><view class="list-item"><image src="../images/syydxb.png"/><view>夜曲</view></view><view class="list-item"><image src="../images/mjz.png"/><view>花海</view></view><view class="list-item"><image src="../images/ylxb.png"/><view>一路向北</view></view><view class="list-item"><image src="../images/yhm.png"/><view>以父之名</view></view></view></view>
</scroll-view>

play.wxml页面:

<!-- 播放器 -->
<view class="content-play"><!--显示音乐信息--><view class="content-play-info"><text>{{play.title}}</text><view>—— {{play.singer}} ——</view></view><!-- 显示专辑封面 --><view class="content-play-cover"><image src="{{play.coverImgUrl}}" sty1e="animation-play-state:{{state}}" /></view><!--显示播放进度和时间--><view class="content-play-progress"><text>{{play.currentTime}}</text><view><slider bindchange="sliderChange" activeColor="#d33a31" block-size="12" backgroundColor="#dadada" value="{{play. percent}}" /></view>  <text>{{play.duration}}</text></view>
</view>

playlist.wxml页面:

<scroll-view cclass="content-playlist" scroll-y><view class="playlist-item" wx:for="{{playlist}}" wx:key="id" bindtap="change" data-index="{{index}}"><image class="playlist-cover" src="{{item.converImgUrl}}" /><view class="playlist-info"><view class="playlist-info-title">{{item.title}}</view><view cclass="playlist-info-singer">{{item.singer}}</view></view><view class="playlist-controls"><text wx:if="{{index==playIndex}}">正在播放</text></view></view>
</scroll-view>

index.wxss页面:

page {display: flex;flex-direction: column;background: #17181a;color: #ccc;height: 100%;
}
.tab{display: flex;
}
.tab-item{flex:1;font-size: 10pt;text-align: center;line-height: 72rpx;border-bottom: 6rpx solid #eee;
}
.tab-item.active{color: #c25b5b;border-bottom-color: #c25b5b;
}
.content {flex: 1;
}
.content > swiper{height: 100%;
}
.player{background: #222;border-top:1px solid #252525;height: 112rpx;
}
.content-info{height: 100%;
}
::-webkit-scrollbar{width: 0;height: 0;color: transparent;
}
.content-info-slide{height: 302rpx;margin-bottom: 20px;
}
.content-info-slide image{width: 100%;height: 100%;
}/* 功能按钮 */
.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{font-size: 11pt;margin-bottom: 20rpx;
}
.content-info-list > .list-title{margin: 20rpx 35rpx;
}
.content-info-list > .list-inner{display: flex;flex-wrap: wrap;margin: 0 20rpx;
}
.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;
}
/*播放器*/
.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;
}
/*操放进度和时间*/
.content-play-progress{display: flex;align-items: center;margin:0 35rpx;font-size: 9pt; text-align: center;
}
.content-play-progress > view {flex: 1;
}
/*显示专辑页面样式*/
.content-play-cover image {animation: rotateImage 10s linear infinite;width: 400rpx;height: 400rpx;border-radius: 50%;border: 1px solid #333 ;
}
@keyframes rotateImage {from {transform: rotate(0deg);}to{transform: rotate(360deg);}
}
/* 播放进度和时间 */
.content-play-progress{display: flex;align-items: flex;margin: 0 35rpx;font-size: 9pt;text-align: center;
}
.content-play-progress > view {flex: 1;
}/* 底部播放器 */
.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;
}
.content-playlist{height: 100%;
}
/* 播放列表 */
.playlist-item {display: flex;align-items: center;border-bottom: 1rpx solid #333 ;height: 112rpx;
}
.playlist-cover {width: 20rpx;height: 80rpx;margin-left:15rpx;border-radius: 8rpx;border: 1px solid#333 ;
}
.playlist-info {flex: 1;font-size: 10pt;line-height: 38rpx;margin-left: 20rpx; padding-bottom: 8rpx;
}
.playlist-info-singer {color:#888;
}

index.json

{"navigationBarBackgroundColor": "#fff","navigationBarTitleText": "音乐","navigationBarTextStyle": "black"
}

源码包:

链接:https://pan.baidu.com/s/1yFkSCOSpRoy9YtaX7ZNQdA?pwd=4d2k 提取码:4d2k


http://www.ppmy.cn/news/122630.html

相关文章

DIY一个自己的音乐播放器2.0来袭

前言&#xff1a;之前做的第一版播放器功能做出来了&#xff0c;但发现结构不是很优雅以及后端api很不稳定&#xff0c;所以进行了一次小升级。此次升级 功能更全&#xff0c;体验更好&#xff0c;api更稳定&#xff0c;技术栈更多&#xff0c;收获也更多?。 [温馨提示&#x…

Mac装机必备之拯救歌荒,好用的五款Mac音乐播放器推荐

Mac平台上好用的音乐播放器有什么推荐&#xff1f;想要最新最热的音乐排行榜、歌单、电台、MV&#xff1f;想要海量无损在线曲库&#xff1f;追求高品质的听觉盛宴&#xff1f; 今天给大家分享的是Mac装机必备之音乐播放器推荐&#xff0c;拯救你的歌荒&#xff0c;缓解你的工作…

JS和H5做一个音乐播放器,附带源码

http://mp.weixin.qq.com/s/KpXT9X46AMlUVXQvpHuXGQ 效果图&#xff1a; 实现的功能 1、首页 2、底部播放控件 3、播放页面 4、播放列表 5、排行榜 6、音乐搜索 输入搜索关键词&#xff0c;点击放大镜图标 7、侧边栏 目录结构 开发心得与总结 1、轮播图 首先感谢作者ShanaMaid/…

【开源项目分享】GitHub中文排行榜 - 帮助你发现高分优秀中文项目-Java

榜单设立目的 &#x1f1e8;&#x1f1f3; GitHub中文排行榜&#xff0c;帮助你发现高分优秀中文项目&#xff1b;各位开发者伙伴可以更高效地吸收国人的优秀经验、成果&#xff1b;中文项目只能满足阶段性的需求&#xff0c;想要有进一步提升&#xff0c;还请多花时间学习高分…

迷你酷狗播放器 v1.017

​​迷你酷狗pc版是一款带有音乐搜索功能的音乐播放器&#xff0c;又称之为迷你酷狗播放器&#xff0c;能够支持DirectSound、64比特混音、AddIn插件扩展技术&#xff0c;同时支持高级采样频率转换(SSRC)和多种比特输出方式&#xff0c;具有强大的回放增益功能&#xff0c;可在…

java模仿QQ音乐播放器

售价&#xff1a;1000RMB。 最近大家都在调用QQMusicAPI&#xff0c;还有网易&#xff0c;酷狗&#xff0c;酷我等各大播放器的接口&#xff0c;自己做播放器&#xff0c;不过网上看了大多数的是html的。于是我做一个java swing的&#xff0c;纯java代码。 QQ音乐播放器也是一…

Python制作音乐播放器,帮你随时放飞心情~

最近网易云音乐闹出不少事情&#xff0c;甚至被各大应用商店下架。它的某些做法小笨聪也着实不敢苟同&#xff0c;但还是希望它整改后能够发展更好&#xff0c;当然不只是在故事式热评方面&#xff0c;还包括更为重要的版权问题。 由此&#xff0c;小笨聪也萌发了制作一个简易…

java不支持mp3_一台手机,不支持JAVA。不通过数据线等工具。能下载MP3吗?

有很多下载方式 1手机GPRS(移动卡)就可以登陆护联网(WAP目前好象被移动封了无法浏览WWW网站了所以建议弄GPRS手机浏览器登陆就可以了&#xff01;所有网站都可以登陆的&#xff01;E680I有播放器支持在线播放还有下载 下载速度一点也不慢甚至要比家庭ADSL还要快 因为手机3G的含…