首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
web3366
广州大学 Web前端
发布于广东
关注
已关注
取消关注
好
@阿珊和她的猫:
1. 仿网易云音乐播放器(technical-architecture)
1. 架构设计2. 技术描述3. 路由定义路由用途/首页推荐页面,展示个性化推荐内容/discover发现音乐页面,音乐分类和排行榜/mine我的音乐页面,个人歌单和收藏/playlist/:id歌单详情页面,显示歌单内歌曲列表/player播放页面,音乐播放控制和歌词显示/search搜索页面,音乐搜索功能/profile用户中心页面,个人信息和设置/music-hall音乐馆页面,精选内容和专题4. 核心组件架构4.1 音频播放管理// 音频状态管理interface AudioState { currentSong: Song | null playlist: Song[] currentIndex: number isPlaying: boolean playMode: 'loop' | 'single' | 'random' volume: number progress: number duration: number}// 歌曲数据结构interface Song { id: string title: string artist: string album: string duration: number cover: string url: string lyrics: LyricLine[]}interface LyricLine { time: number text: string}4.2 歌单管理// 歌单数据结构interface Playlist { id: string name: string description: string cover: string playCount: number songCount: number creator: User songs: Song[] createTime: number}interface User { id: string nickname: string avatar: string level: number followers: number followings: number}4.3 搜索功能// 搜索结果类型interface SearchResult { songs: Song[] playlists: Playlist[] artists: Artist[] albums: Album[]}interface Artist { id: string name: string avatar: string followers: number}interface Album { id: string name: string artist: string cover: string publishTime: number}5. 状态管理设计5.1 Pinia Store结构5.2 核心Store定义// 播放器Storeexport const usePlayerStore = defineStore('player', { state: () => ({ currentSong: null as Song | null, playlist: [] as Song[], currentIndex: 0, isPlaying: false, playMode: 'loop' as 'loop' | 'single' | 'random', volume: 1, progress: 0, duration: 0 }), actions: { playSong(song: Song) { this.currentSong = song this.isPlaying = true }, togglePlay() { this.isPlaying = !this.isPlaying }, nextSong() { // 根据播放模式切换歌曲逻辑 }, prevSong() { // 上一首歌曲逻辑 } }})6. Mock数据设计6.1 模拟API结构// Mock数据配置interface MockConfig { songs: Song[] playlists: Playlist[] artists: Artist[] albums: Album[] users: User[]}// 模拟API端点const MOCK_APIS = { // 推荐歌单 '/api/recommend/playlist': 'GET', // 歌单详情 '/api/playlist/:id': 'GET', // 搜索 '/api/search': 'GET', // 歌曲URL '/api/song/url/:id': 'GET', // 歌词 '/api/lyric/:id': 'GET', // 排行榜 '/api/toplist': 'GET'}6.2 音频播放技术实现// Web Audio API播放器类class AudioPlayer { private audioContext: AudioContext private audioElement: HTMLAudioElement private gainNode: GainNode private analyser: AnalyserNode constructor() { this.audioContext = new AudioContext() this.audioElement = new Audio() this.setupAudioNodes() } private setupAudioNodes() { const source = this.audioContext.createMediaElementSource(this.audioElement) this.gainNode = this.audioContext.createGain() this.analyser = this.audioContext.createAnalyser() source.connect(this.gainNode) this.gainNode.connect(this.analyser) this.analyser.connect(this.audioContext.destination) } play(url: string) { this.audioElement.src = url this.audioElement.play() } pause() { this.audioElement.pause() } setVolume(volume: number) { this.gainNode.gain.value = volume } getProgress(): number { return this.audioElement.currentTime / this.audioElement.duration }}7. 组件设计规范7.1 基础组件结构<!-- 歌曲列表项组件 --><template> <div class="song-item" @click="handlePlay"> <img class="cover" :src="song.cover" /> <div class="info"> <h3 class="title">{{ song.title }}</h3> <p class="artist">{{ song.artist }}</p> </div> <div class="actions"> <van-icon name="play-circle-o" @click.stop="handlePlay" /> <van-icon name="ellipsis" @click.stop="showActions" /> </div> </div></template><script setup lang="ts">import { usePlayerStore } from '@/stores/player'interface Props { song: Song showAlbum?: boolean}const props = defineProps<Props>()const playerStore = usePlayerStore()const handlePlay = () => { playerStore.playSong(props.song)}</script>7.2 页面布局结构<!-- 基础页面布局 --><template> <div class="page-container"> <van-nav-bar :title="title" left-arrow @click-left="onClickLeft" /> <div class="page-content"> <router-view /> </div> <PlayerBar /> <van-tabbar v-model="activeTab" route> <van-tabbar-item icon="home-o" to="/">首页</van-tabbar-item> <van-tabbar-item icon="search" to="/discover">发现</van-tabbar-item> <van-tabbar-item icon="music-o" to="/mine">我的</van-tabbar-item> <van-tabbar-item icon="user-o" to="/music-hall">音乐馆</van-tabbar-item> </van-tabbar> </div></template>8. 性能优化策略8.1 懒加载实现// 图片懒加载指令const lazyLoad = { mounted(el: HTMLImageElement, binding: DirectiveBinding) { const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { el.src = binding.value observer.unobserve(el) } }) }) observer.observe(el) }}8.2 虚拟滚动长列表使用虚拟滚动优化性能歌曲列表、搜索结果等大数据量展示场景使用第三方库如vue-virtual-scroller8.3 音频预加载预加载下一首歌曲缓存常用音频资源使用Service Worker进行资源缓存
点赞 3
评论 3
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 23:36
门头沟学院 前端工程师
做了一个走路也能复习的八股网站
八股是前端面试中的一部分,特别在校招会问得更多,之前面试看市面的八股网站都讲得不深入,索性自己做一个高频八股网站,并且做了移动端适配,这下上班上学路上也能随时打开看看了。分享给大家,希望对牛友们有点帮助https://www.nanyiblog.cn/
点赞
评论
收藏
分享
昨天 10:01
已编辑
百度_高级研发工程师
父母就是我求职路上最大的山
在这里奉劝大家一句,一个人如何,是看他在你低谷时是怎么对你的,而不要看他在你辉煌时是怎么对你的。 曾经我讲过我的故事,但有人说我是编的,我当然理解,毕竟人生而不同,有人家庭美满,有人家道中落,有人原生家庭,当然还有人没有父母。共情能力不是谁都有的,而且我奉劝大家,不要跟没有共情能力的人交朋友,他们只在乎自己。 每当看见一些帖子,一些短视频,在说自己的父母有多好,有多关心自己的时候,我都会很心酸,我多么希望我也可以有这样的温情,我多么希望那个人可以是我。 我甚至不能说,不能提,因为家丑不可外扬,因为说自己父母就如同说自己家庭不行一样,舆论、孝道、传统、脸面,难道这些东西就是为了让我打碎牙往肚子里...
哈哈哈,你是老六:
遇到这样的父母也是悲哀
父母对你找工作是助力还是...
点赞
评论
收藏
分享
04-13 14:43
门头沟学院 测试开发
实习期间请了两天半写毕设和论文,结果……
真是无语了😓
点赞
评论
收藏
分享
05-27 09:39
已编辑
广东医科大学 前端工程师
避雷明锐理想(明睿机器视觉)要招的软件工程师岗
避雷明锐理想(明睿机器视觉)要招的软件工程师岗!!!这家公司目前没有it部门,他们自己内部也不知道自己想要招什么样的人,然后说岗位技能目前要求没那么高哄你过去线下面试。初面六个人一起上来面,二面人事总监又带一班hr新人学习过来五六个人面。人事总监面试前半个钟问你能不能提前过来,说得好像我迟到了一样,为了赶时间我只好打车过去了,后面一开场问你怎么过来的,我说搭地铁,回我哎呀东莞有地铁了吗我在深圳不知道(现场立马尬住)然后特别喜欢问你一些跟工作内容无关的个人隐私问题(父母做什么的、有多少兄弟姐妹、结婚没有、兄弟姐妹做什么的、都在哪住户口全查一遍),问你四六级过了没有(JD没写明确要求)。基本上一面...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
来🦢的第一个需求就是3000行skill
2.1W
2
...
27届暑期大厂后段高频面试汇总
1.1W
3
...
27届暑期前端高频面试题汇总(字节百度阿里快手等多家大厂)
3595
4
...
我可能就是大家口中的"工贼"
3423
5
...
父母就是我求职路上最大的山
2730
6
...
前端四轮速通字节ssp(专升本)
2598
7
...
26前端的深夜
2201
8
...
学院本熬到上岸的这两个月
2114
9
...
26届学院本总结
2009
10
...
字节三面
1843
创作者周榜
更多
正在热议
更多
#
实习生的蛐蛐区
#
1008122次浏览
5134人参与
#
扒一扒那些奇葩实习经历
#
160769次浏览
1183人参与
#
发面经攒人品
#
8906363次浏览
98770人参与
#
应届生第一份工资要多少合适
#
28306次浏览
108人参与
#
27届实习投递记录
#
166715次浏览
1682人参与
#
应届生,你找到工作了吗
#
181048次浏览
914人参与
#
招聘要求与实际实习内容不符怎么办
#
226895次浏览
1077人参与
#
机械人值得去的小众企业
#
38409次浏览
68人参与
#
现在入门AI首先要做什么?
#
18349次浏览
145人参与
#
互联网行业现在还值得去吗
#
65741次浏览
380人参与
#
实习最想跑路的瞬间
#
147757次浏览
787人参与
#
面试反问你会问什么
#
213671次浏览
1962人参与
#
机械人,秋招第一次笔试的企业是哪家?
#
106983次浏览
715人参与
#
万物皆可发面经
#
5634次浏览
67人参与
#
AI了,我在打一种很新的工
#
211782次浏览
2354人参与
#
实习,不懂就问
#
231913次浏览
1771人参与
#
实习教会我的事
#
82323次浏览
521人参与
#
网易求职进展汇总
#
218863次浏览
1542人参与
#
春招前还要继续实习吗?
#
72144次浏览
353人参与
#
校招求职有谈薪空间吗
#
234508次浏览
2400人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务