SmartisanMusicPlayer仿写的一个锤子音乐播放器

本项目SmartisanMusic为一款本地音乐播放器,灵感来源于锤子音乐播放器,支持基本播放功能,并具备按歌手和专辑分类的播放列表、收藏、歌词显示等功能。采用RxJava、Glide和GreenDao等技术实现。

a.jpg

b.jpg

artisanMusic.gif

ArtisanMusic

#项目介绍:

SmartisanMusic 仿照锤子音乐播放器写的一个本地音乐播放器,会尽可能的实现锤子音乐播放器已有的功能。
也会去除一些功能,比如去除:云音乐,联网搜索,因为主要还是播放本地音乐为主。
同时也会增加一些个人觉得有趣的交互,比如增加了类似QQ音乐的左右滑动切换上/下一曲的交互。用GreenDao实现了收藏功能,也使用了Rxjava的一些
操作符:timer、interval、map等,还有Rxbus作为EventBus的替代者,在本项目开发中使用频繁,如多页面的UI更新,数据的传送。目前实现的功能:播放功能、播放列表的分类(按歌手和专辑)、侧边导航栏、收藏、通知栏、歌词滚动、屏幕常亮。

第三方库

https://github.com/1900Star/SmartisanMusicPlayer
### 用 Vue.js 实现 QQ 音乐界面的设计与实现 在使用 Vue.js 仿制 QQ 音乐界面时,可以参考现有的项目结构和技术栈。以下是一个完整的解决方案,包括技术选型、项目结构设计和关键功能实现。 #### 技术选型 为了实现一个功能完善的移动端 QQ 音乐界面,可以选择以下技术栈: - **Vue.js**:作为核心框架,用于构建用户界面。 - **Vue Router**:实现页面路由管理。 - **Vuex**:用于状态管理,确保数据在不同组件间同步[^2]。 - **Axios**:处理 HTTP 请求,获取接口数据。 - **SASS/LESS**:用于样式管理,提升代码可维护性。 #### 项目结构设计 一个典型的 Vue.js 项目结构如下: ```plaintext src/ ├── assets/ # 存放静态资源(图片、字体等) ├── components/ # 可复用的组件 │ ├── Player.vue # 播放器组件 │ ├── SongList.vue # 歌单列表组件 │ └── SearchBar.vue # 搜索栏组件 ├── views/ # 页面级别的组件 │ ├── Home.vue # 首页 │ ├── Singer.vue # 歌手详情页 │ └── Playlist.vue # 歌单页 ├── store/ # Vuex 状态管理 │ ├── index.js # Vuex 入口文件 │ ├── state.js # 状态管理 │ ├── mutations.js # 修改状态的方法 │ ├── actions.js # 异步操作 │ └── getters.js # 映射数据 ├── router/ # 路由配置 │ └── index.js ├── services/ # 封装 API 请求 │ └── api.js └── App.vue # 根组件 ``` #### 关键功能实现 1. **播放器功能** - 使用 `HTML5` 的 `<audio>` 标签实现音乐播放。 - 提供播放、暂停、进度条等功能。 ```vue <template> <div class="player"> <audio :src="currentSongUrl" controls ref="audioPlayer"></audio> <button @click="togglePlay">播放/暂停</button> </div> </template> <script> export default { data() { return { currentSongUrl: 'https://example.com/song.mp3' }; }, methods: { togglePlay() { const audio = this.$refs.audioPlayer; if (audio.paused) { audio.play(); } else { audio.pause(); } } } }; </script> ``` 2. **歌单列表展示** - 利用 `v-for` 指令渲染歌曲列表。 - 每个列表项绑定点击事件,切换当前播放歌曲。 ```vue <template> <ul> <li v-for="(song, index) in songList" :key="index" @click="playSong(song)"> {{ song.name }} - {{ song.artist }} </li> </ul> </template> <script> export default { data() { return { songList: [ { name: '歌曲1', artist: '歌手1', url: 'url1' }, { name: '歌曲2', artist: '歌手2', url: 'url2' } ] }; }, methods: { playSong(song) { this.currentSongUrl = song.url; } } }; </script> ``` 3. **歌手详情页** - 使用 `Vuex` 管理歌手数据,确保跨组件共享。 - 在 `actions.js` 中封装异步请求逻辑。 ```javascript // store/actions.js import axios from 'axios'; export const fetchSingerDetail = ({ commit }, singerId) => { return axios.get(`/api/singers/${singerId}`) .then(response => { commit('SET_SINGER_DETAIL', response.data); }); }; ``` 4. **路由配置** - 使用 Vue Router 定义页面跳转逻辑。 ```javascript // router/index.js import Vue from 'vue'; import Router from 'vue-router'; import Home from '@/views/Home.vue'; import Singer from '@/views/Singer.vue'; Vue.use(Router); export default new Router({ routes: [ { path: '/', component: Home }, { path: '/singer/:id', component: Singer } ] }); ``` #### 数据抓取与接口调用 在实际开发中,需要从 QQ 音乐或其他音乐平台获取歌曲数据。由于接口可能发生变化,建议定期检查并更新请求逻辑[^4]。 ```javascript // services/api.js import axios from 'axios'; export const getSongs = () => { return axios.get('https://api.example.com/songs'); }; export const getSingerDetail = (singerId) => { return axios.get(`https://api.example.com/singers/${singerId}`); }; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值