赞
踩
在数字化时代,音乐不再仅仅是一种娱乐方式,它已经成为我们生活中不可或缺的一部分。无论是放松身心、激发创造力,还是与朋友分享喜悦,音乐都有着不可比拟的力量。现在,一个全新的微信小程序项目——“云音乐”为您带来了发现音乐的全新方式。
音乐搜索和播放: 通过云音乐,您可以轻松搜索和播放数百万首歌曲,包括最新的热门单曲和经典老歌。
个人化推荐: 云音乐会根据您的听歌习惯和喜好向您推荐新音乐,让您不断发现新的音乐宝藏。
歌词同步显示: 想要跟着歌词一起唱?云音乐会将歌词实时同步显示,让您更深入地感受音乐的魅力。
创建播放列表: 您可以轻松创建和管理自己的播放列表,根据心情或场合随时切换不同的音乐列表。
开源项目: 云音乐是一个开源项目,您可以自由查看和修改其源代码,根据自己的需求进行定制。
使用开源API接口:云音乐使用了开源的api接口,可以运行在node.js等服务端中,你可以轻松的部署自己的接口服务器。
视频播放器:你可以观看歌曲MV等视频。
歌单中心,视频中心,电台中心,排行榜,搜索中心,用户收藏,用户观看记录...
技术名 | 功能 | 官网 |
---|---|---|
原生微信小程序 | 开发微信小程序 | 微信开放文档 |
TDesign | UI组件库 | TDesign |
Sass | css预处理器 | Sass: Syntactically Awesome Style Sheets |
mobx-miniprogram | 全局状态管理 | mobx-miniprogram |
例如
git clone https://gitee.com/tmaofu/mini-program---cloud-music.git
进入项目根目录,执行npm install
安装项目依赖
cd ./mini-program---cloud-music npm install
使用微信开发者工具导入项目
开始构建npm包,构建成功后关闭微信开发者工具。
具体可以参考: 网易云音乐 NodeJS 版 API
安装
git clone git@github.com:Binaryify/NeteaseCloudMusicApi.git cd NeteaseCloudMusicApi npm install
运行
node app.js
服务器启动默认端口为 3000, 若不想使用 3000 端口 , 可使用以下命令 : Mac/Linux
$ PORT=4000 node app.js
windows 下使用 git-bash 或者 cmder 等终端执行以下命令 :
$ set PORT=4000 && node app.js
再次用微信开发者工具打开项目, 编辑config\config.js
文件中的baseUrl
为你的API接口服务的地址。
export default { baseUrl: 'http://127.0.0.1:3000', cookieKey: 'cookie', //cookie保存本地的key名称 blogUrl: 'https://www.yuque.com/maofu-rzqcp', searchHistoryKey: 'searchHistory' }
当配置好之后就可以编译运行了
api: 管理主包中用到的api接口 assets: 存放主包中的静态资源文件 behaviors: 存放公用的behaviors components: 存放主包中的组件 config: 存放配置文件 custom-tab-bar: 自定义tab-bar组件 data: 存放一些会用到的数据 miniprogram_npm: npm包 node_modules: npm包 packages: 存放分包 pages: 存放主包中的页面 store: 状态管理仓库 template: 存放主包中的模板 utils: 存放工具性质的文件
flx-TDesign.scss: 修改TDesign样式 iconfont.scss: 阿里巴巴图标字体样式 index.scss: 存放一些共用样式类 variable.scss: 定义了一系列css样式变量
injectAppStore.js: 可以向组件或者页面注入应用的状态,例如tab-bar当前的索引值 injectCheckLogin.js: 注入检查登录相关的函数 injectMusicPlayerStore.js:注入音乐播放器相关的状态 injectUserStore.js:注入用户相关的状态
common: 存放公共组件 home-center: 存放首页中会用到的组件 personal-center:存放个人中心页会用到的组件 video-center: 存放视频中心页会用到的组件
├─components │ ├─common │ │ ├─comment-area │ │ ├─comment-item │ │ ├─info-item-card │ │ ├─music-player │ │ ├─my-loading │ │ ├─play-controll │ │ ├─program-display-list │ │ ├─song-display-list │ │ ├─song-list │ │ └─touch-panel
一个触摸面板组件,可以触发触摸,滑动事件,判断滑动方向,滑动距离等。 在音乐播放器组件(music-player)中,个人中心-个人背景卡片中,有使用。
├─components │ ├─home-center │ │ ├─home-item-card │ │ └─rank-list-card
├─components │ ├─personal-center │ │ ├─collect-songList │ │ └─create-songList
├─components │ └─video-center │ ├─commend-video │ ├─commend-video-item │ └─mv-video
export default { baseUrl: 'http://127.0.0.1:3000', cookieKey: 'cookie', //cookie保存本地的key名称 blogUrl: 'www.maofu123.top', searchHistoryKey: 'searchHistory' }
存放了省份,城市信息
packges-common: 公共分包 packges-home-center: 首页分包,存放了在首页中会进入的页面,要使用的组件,等等资源。 packges-personal-center: 个人中心分包 packges-sys: 系统分包,存放了登录相关的页面。 packges-video-center: 视频中心分包
├─packages │ ├─package-common │ │ └─pages │ │ └─comment-display
页面/组件名称 | 功能 |
---|---|
comment-display | 评论展示页面 |
├─packages │ ├─package-home-center │ │ ├─components │ │ │ ├─broadcaster-item-display │ │ │ ├─playlist-item-display │ │ │ ├─search-list │ │ │ ├─search-result-dj │ │ │ ├─search-result-playlist │ │ │ ├─search-result-song │ │ │ ├─search-result-tabs │ │ │ ├─search-result-video │ │ │ └─search-result-voice │ │ └─pages │ │ ├─broadcaster-center │ │ ├─broadcaster-display │ │ ├─broadcaster-tags │ │ ├─playlist-center │ │ ├─playlist-display │ │ ├─playlist-tags │ │ ├─recommended-daily │ │ ├─recommended-playlist │ │ ├─search-center │ │ └─toplist-center
组件名称 | 功能 |
---|---|
broadcaster-item-display | |
playlist-item-display | |
search-list | |
search-result-dj | 搜索结果展示列表-电台 |
search-result-playlist | 搜索结果展示列表-歌单 |
search-result-song | 搜索结果展示列表-歌曲 |
search-result-tabs | 搜索结果展示的tabs |
search-result-video | 搜索结果展示列表-视频 |
search-result-voice | 搜索结果展示列表-声音 |
页面名称 | 功能 |
---|---|
broadcaster-center | |
broadcaster-display | |
broadcaster-tags | |
playlist-center | |
playlist-display | |
playlist-tags | |
recommended-daily | |
recommended-playlist | |
search-center | |
toplist-center | |
├─packages │ ├─package-personal-center │ │ ├─components │ │ │ ├─ei-form-item │ │ │ ├─mc-album │ │ │ ├─mc-dj │ │ │ ├─mc-video │ │ │ ├─rp-album │ │ │ ├─rp-dj │ │ │ ├─rp-song │ │ │ ├─rp-songList │ │ │ ├─rp-video │ │ │ └─rp-voice │ │ ├─pages │ │ │ ├─edit-info │ │ │ ├─my-collection │ │ │ ├─mylike-video │ │ │ └─recent-play │ │ └─template │ │ ├─mc-item-card │ │ └─rp-item-card
组件名称 | 功能 |
---|---|
ei-form-item | |
mc-album | |
mc-dj | |
mc-video | |
rp-album | 最近播放-专辑 |
rp-dj | 最近播放-电台 |
rp-song | 最近播放-歌曲 |
rp-songList | 最近播放-歌单 |
rp-video | 最近播放-视频 |
rp-voice | 最近播放-声音 |
页面名称 | 功能 |
---|---|
edit-info | |
my-collection | |
mylike-video | |
recent-play | |
模板名称 | 功能 |
---|---|
mc-item-card | 我的收藏-信息展示模板 |
rp-item-card | 最近播放-信息展示模板 |
├─packages │ ├─package-sys │ │ ├─assets │ │ │ └─img │ │ └─pages │ │ └─login
页面名称 | 功能 |
---|---|
login | |
├─packages │ └─package-video-center │ ├─components │ │ └─video-play-item │ └─pages │ └─video-player
组件名称 | 功能 |
---|---|
video-play-item | 视频播放器-每一项 |
页面名称 | 功能 |
---|---|
video-player | 视频播放器页面-可滑动加载更多 |
├─pages │ ├─TB-home │ ├─TB-personal-center │ └─TB-video
页面名称 | 功能 |
---|---|
TB-home | 首页 |
TB-personal-center | 个人中心页 |
TB-video | 视频中心页 |
├─store │ ├─app │ ├─musicPlayer │ └─user
文件名 | 功能 |
---|---|
app | 关于app的全局状态仓库 |
musicPlayer | 关于音乐播放器的全局状态仓库 |
user | 关于用户信息的全局状态仓库 |
├─template │ ├─common │ │ └─info-display-card │ ├─home-center │ │ └─rank-list-item │ └─personal-center │ └─more-operations-item
模板名 | 功能 |
---|---|
info-display-card | |
模板名 | 功能 |
---|---|
rank-list-item | |
模板名 | 功能 |
---|---|
more-operations-item | |
└─utils │ getArea.js │ localStorage.js │ request.js │ util.js │ ├─filter-js │ filter.js │ └─filter-wxs filter.wxs
文件名 | 功能 |
---|---|
getArea | 获取省份,城市名 |
localStorage | 本地存储 |
request | 封装wx.request |
util | 存放一些工具性质的函数 |
filter.js | 过滤器 |
filter.wxs | 过滤器 |
这是我这个项目中用到的一些api接口,接口返回的数据均有示例。 使用须知 - 小程序-云音乐
打开utils/request.js
,修改 Requester
类中的方法:
方法名 | 功能 |
---|---|
requestIntercept | 请求拦截器 |
responseIntercept | 响应拦截器 |
errIntercept | 错误拦截器 |
具体实现请查看项目文件下的 utils/request.js
rpx问题:在scss中没有rpx这个单位
在小程序中不能使用本地字体
从其他页面跳转tabbar页面时,当前tabbar索引不会改变
每次使用 mobx-miniprogram-bindings
来为组件,页面绑定状态仓库都很麻烦,我们可以写一个 behavior
来实现代码的复用。
behavior
import { createStoreBindings } from 'mobx-miniprogram-bindings' import { appStore } from '@/store/app/app' export const injectAppStore = Behavior({ data: { }, lifetimes: { attached() { this.storeBindings = createStoreBindings(this, { store: appStore, fields: ['tabBarIndexValue'], actions: ['setTabBarIndexValue'] }) }, /** * 监听页面卸载 */ detached() { this.storeBindings.destroyStoreBindings() } } })
behavior
import { injectAppStore } from '@/behaviors/injectAppStore' Component({ behaviors: [injectAppStore], ... })
现在你可以在该组件/页面中使用 tabBarIndexValue
变量,setTabBarIndexValue
方法了,例如:this.data.tabBarIndexValue
。 注意你最早只能在 onReady
生命周期中访问到仓库中的数据。
可以封装wx.uploadFile UploadTask | 微信开放文档
dayjs Time from now · Day.js 其他 Java 实现时间戳显示格式为几天前、几分钟前、几秒前及其应用时间用分钟展示是前端处理还是后端Williams_ Z的博客-CSDN博客 js 时间戳转换成几分钟前,几小时前,几天前(亲测有效)js,时间戳往前3分钟Adam——的博客-CSDN博客
Date
wxs中使用date创建实例报错wxs不支持date天心天地生的博客-CSDN博客
[ WXML 文件编译错误] ./utils/filter-wxs/filter.wxs Unexpected token `Date` 9 | }, 10 | formatMsgTime: function (timespan) { > 11 | var dateTime = new Date(timespan) // 将传进来的字符串或者毫秒转为标准时间 | ^ 12 | var year = dateTime.getFullYear() 13 | var month = dateTime.getMonth() + 1 14 | var day = dateTime.getDate()
解决: 获取当前日期使用getDate()
将 var dateTime = new Date(timespan) 替换为 var dateTime = getDate(timespan)
获取全局唯一的背景音频管理器。 小程序切入后台,如果音频处于播放状态,可以继续播放。但是后台状态不能通过调用API操纵音频的播放状态。 从微信客户端6.7.2版本开始,若需要在小程序切后台后继续播放音频,需要在 app.json 中配置 requiredBackgroundModes 属性。开发版和体验版上可以直接生效,正式版还需通过审核。
需要在app.json中添加如下字段:
{ "requireBackgroundModes": ["audio"], }
BackgroundAudioManager | 微信开放文档
this.data.userInfo
拿到数据使用mobx-miniprogram-bindings绑定userStore
时, userInfo
确实会被添加在this.data
中,但是在一些较早的生命周期中,不能通过this.data.userInfo
拿到数据。
方式一
import { userStore } from '@/store/user/user' import { createStoreBindings } from 'mobx-miniprogram-bindings' export const injectUserStore = Behavior({ lifetimes: { attached() { this.storeBindings = createStoreBindings(this, { store: userStore, fields: ['userInfo', 'isUserLogin', 'collectSongList', 'userLikeSongLIst'], actions: ['setUserInfo', 'updateUserInfo', 'clearUserInfo'] }) }, detached() { this.storeBindings.destroyStoreBindings() } } })
方式二
在一些其他生命的周期中的情况
/** * 生命周期函数--监听页面初次渲染完成 */ onReady() { console.log(this.data.userInfo, '555') }, /** * 生命周期函数--监听页面显示 */ onShow() { console.log(this.data.userInfo,'jjj') },
注意:
目前来看,不可以在onLoad,第一次onShow中通过this.data.userInfo
来拿到数据; 最早可以在onReady中来拿到数据。
相关视频参考 尚硅谷微信小程序开发(零基础小程序开发入门到精通)哔哩哔哩bilibili
网易云音乐api接口 GitHub - Binaryify/NeteaseCloudMusicApi: 网易云音乐 Node.js API service
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。