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

ops/2024/10/19 19:08:36/
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/ops/126787.html

相关文章

【K8s】专题十四(2):Kubernetes 安全机制之 Security Context

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正! 如果对您有帮助,烦请点赞、关注、转发、订阅专栏! 专栏订阅入口 | 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 | 往期精彩文章 【Docker】(全…

16CFR第1262涉及磁铁安全标准介绍

16CFR第1262部分磁铁安全标准简介概述 16CFR第1262部分是美国消费品安全委员会(CPSC)制定的磁铁安全标准,旨在减少或消除因误食一种或多种危险磁铁导致的消费者不合理死亡或受伤风险。该标准适用于设计、销售或打算用于娱乐、珠宝(包括儿童珠宝&#xf…

如何开启华为交换机 http

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

双十一有啥不能错过的好物清单?真心为你带来2024最值好物分享!

双十一购物狂欢节即将到来,许多朋友们都在期待着这一天,希望能够在这个特别的日子里为自己添置一些日常用品。今天,我特意为大家精心挑选了五款在生活中都会用得到的好物,希望能够帮助大家在双十一期间做出明智的选择。 最值好物…

【计网笔记】数据链路层

目录 向上网络层接口 向下物理层接口 封装成帧 字节计数法 字节填充的标志字节法 比特填充的标志比特法 物理层编码例外法 差错检测 数据链路层协议 停-等式协议 自动重传ARQ协议/带重传机制的肯定确认PAR协议 双向传输的捎带确认 滑动窗口协议 链路利用率 最大…

012集——CAD图中线段坐标导出到txt(CAD—C#二次开发入门)

如图所示,CAD图中line和pline坐标和图层数据导出到txt文本。 程序运行后导出如下文件: 附部分源代码: public static void DwgToTxt(this Database db) {// var db Z.db;var ed Z.ed;//Point3d pt ; BlockData data new BlockData();Lis…

Redis入门到精通(二):入门Redis看这一篇就够了

文章目录 一、Redis的双写一致性1.延迟双删2.添加分布式锁3.异步监听可靠消息基于MQ消息队列的异步监听基于Canal的异步通知 二、Redis的持久化持久化流程1.RDB机制1.1save1.2bgsave1.3自动触发 2.AOF机制三种触发机制3.RDB和AOF的对比 三、Redis的数据删除策略1.惰性删除2.定期…

超详细的Java Web开发

Java Web开发是一个广泛的主题,涉及多个方面,包括前端技术、后端框架、数据库交互、部署等。下面是一个详细的Java Web开发框架,包括从项目搭建到具体代码实现的全过程。 Java Web开发框架 1. 环境搭建 1.1 安装开发工具 IDE:IntelliJ IDEA 或 Eclipse服务器:Apache Tom…