【网易云音乐】--源代码分享

embedded/2024/10/18 12:34:56/
htmledit_views">

最近写了一个网易云音乐的音乐实现部分,是通过JavaScript和jQuery实现的,具体效果大家可以参照下面的视频

源代码分享 - git地址: 网易云音乐源代码

下面将着重讲解一下音乐实现部分

视频有点模糊,不好意思,在b站上添加视频的时候就这样了,如果大家有好用的截视频软件可以推荐我一下哦

网易云音乐歌曲功能(评论源代码分享)

页面效果: 

页面一:

页面二:

 页面三:

代码实现讲解: 

整个页面是通过html中的三个部分实现的,头部(header)- 中间(middle)- 底部 (footer)  中间内容是通过js动态添加渲染的(大家可以通过上面的页面看出来 页面在变化的时候,底部和头部不变,只有中间变化)

中间页面是通过页面的herf变化进行动态添加的,这是监听事件的一部分代码 其中的component是分装好的函数(动态添加代码的部分),通过监听herf对中间内容进行改变

javascript">// 定义路由表
const routers = [{name: "home",//定义函数component: homeComponent,},{name: "about",component: aboutComponent,},{name: "recommend",component: recommendComponent,},
];let hash;
function changeComponent() {let options = getRouterOptions(hash);// 查找对应的路由const matchedRoute = routers.find((router) => router.name === options.name);if (matchedRoute) {// 执行对应的组件函数,传递解析的路由参数matchedRoute.component(options);} else {// 如果找不到对应的路由,执行404组件homeComponent()}
}window.addEventListener("hashchange", () => {hash = window.location.hash;changeComponent();
});

 关于音乐播放的实现大家可以通过下面这个链接学习进行实现,功能是一样的前端】-音乐播放器(源代码和结构讲解,大家可以将自己喜欢的歌曲添加到数据当中,js实现页面动态显示音乐)-CSDN博客

歌词实现动态效果思想:

1.获得播放歌词内容

2.通过歌词数据初始化当前歌词列表

3.通过获取audio对象,获取播放时间,然后通过将json中的对象中的时间进行解析成秒数,通过当前音乐时间找出应该播放哪句歌词,然后给当前歌词进行高光设置,并且将歌词进行改变(这些都通过audio时间变化进行监听调用,并且只有再歌词index改变时才有效果)

点击进度条进行音乐进度改变:

通过获取对象,底部线条,覆盖线条,覆盖线条显示当前播放进度,通过点击位置,获得当前音乐应该跳转的时间,并且根据点击位置更新覆盖条位置

javascript">// 获取 DOM 元素const progressBar = document.querySelector(".music-progress-bar");const progressLine = document.querySelector(".music-progress-line");const audio = document.querySelector("audio");// 监听点击进度条事件progressBar.addEventListener("click", function (e) {// 获取进度条宽度const progressBarWidth = progressBar.offsetWidth;// 获取点击位置相对于进度条的距离const clickX = e.offsetX;// 计算点击位置的百分比const percentage = clickX / progressBarWidth;// 计算音乐要跳转到的时间const newTime = percentage * audio.duration;// 设置音乐播放时间audio.currentTime = newTime;// 更新进度条显示updateProgressBar();});// 更新进度条显示函数function updateProgressBar() {const currentTime = audio.currentTime;const duration = audio.duration;// 计算播放进度百分比const percentage = (currentTime / duration) * 100;// 设置进度条宽度progressLine.style.width = percentage + "%";}

到这里大致思路讲解完了,大家如果有什么疑问可以私我!!!

 


http://www.ppmy.cn/embedded/128451.html

相关文章

【华为】静态NAT、动态NAT、NAPT、Easy IP、NAT Server

静态 NAT:将内网主机的私网 IP地址一对一映射到公网 IP 地址。动态 NAT:将内网主机的私有地址转换为公网地址池里面的地址。由于静态NAT严格地一对一进行地址映射,这就导致即便内网主机长时间离线或者不发送数据时,与之对应的公有…

【项目部署】在亚马逊云(AWS)上使用宝塔面板部署前后端分离的 Vue3 + Spring Boot 项目

1. 准备工作 AWS 账户:确保你已经注册了 AWS 账户,并且有足够的权限来创建 EC2 实例和配置安全组。【AWS账户注册】注册亚马逊免费云服务器一年期个人用户项目准备:确保你已经准备好了前端 Vue3 项目(并且已打包生成静态文件&…

【人工智能】实验室GPU资源申请使用

实验室独占实例Ubuntu 20.04 配置 Pytorch GPU 一、换源 1. 备份原来的文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup2. 编辑vi /etc/apt/sources.list文件 vim /etc/apt/sources.list3. 将内容全部替换为下面 # 默认注释了源码镜像以提高 apt update…

文本生成视频技术:艺术与科学的交汇点

在人工智能技术的飞速发展下,文本生成视频(Text-to-Video)技术已经成为现实。这项技术能够根据文本描述生成相应的视频内容,极大地拓展了内容创作的边界。本文将从三个主要方面对文本生成视频技术进行深入探讨:技术能达…

白炽灯有频闪为什么最护眼?孩子用的台灯哪个牌子好你知道吗?

在当今社会,随着电子产品的普及与长时间的学习需求,保护视力成为了家庭关注的重点之一。而关于照明设备的选择,市场上存在各种说法与推荐,其中一种观点认为,尽管白炽灯存在频闪现象,它却因为接近自然光的变…

【Kubernets】配置类型资源 Etcd, Secret, ConfigMap

文章目录 所有资源概览Etcd详细说明一、基本概念二、主要功能三、架构与组件四、数据模型与操作五、安全与认证六、集群部署与管理 Secret详细说明一、Secret 的类型二、Secret 的创建三、Secret 的使用四、Secret 的更新与删除五、Secret 的安全性 ConfigMap详细说明一、Confi…

OpenCV高级图形用户界面(6)获取指定窗口中图像的矩形区域函数getWindowImageRect()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 提供窗口中图像的矩形区域。 该函数 getWindowImageRect 返回图像渲染区域的客户端屏幕坐标、宽度和高度。 函数原型 Rect cv::getWindowImage…

【论文速读】Prefix-Tuning: Optimizing Continuous Prompts for Generation

arxiv:2101.00190v1 摘要 微调实际上是利用大型预训练过的语言模型来执行下游任务的一种方法。但是,它会修改所有的语言模型参数,因此需要为每个任务存储一个完整的副本。在本文中,我们提出了Prefix-Tuning(前缀调优…