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

server/2024/10/18 6:06:35/
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/server/130811.html

相关文章

工业和自动化领域常见的通信协议

在工业和自动化领域,有多种常见的通信协议,主要用于设备间的通信、数据传输和控制。 Modbus: 类型:串行通信协议用途:广泛用于工业自动化设备间的通信,如PLC、传感器和执行器。优点:简单、开放且…

Vue2中如何使用从父组件中使用子组件中的数据

在Vue.js中,当一个子组件被父组件引用时,父组件可以通过ref属性来创建一个指向子组件实例的引用。这个引用可以在父组件的模板或组件的方法中使用。 在父组件中使用ref来访问子组件的数据和方法: 首先,我们在子组件中定义一些数…

Session反序列化漏洞解析

参考文章:PHP session反序列化漏洞超详细讲解_php技巧_脚本之家 (jb51.net) 一、前置基础 1、session请求过程: 当某个用户第一次访问网站时,Session_start()函数会创建一个唯一的SessionID,并通过HTTP响应头,也就是返…

Linux中的chown命令详解

文章目录 Linux中的chown命令详解一、引言二、chown命令基础1、命令格式2、常用选项 三、chown命令实例1、改变文件所有者2、改变目录所有者和组3、只改变文件所属的组4、忽略无效的用户和组5、递归改变目录所属的组,保持所有者不变 四、注意事项 Linux中的chown命令…

Github 2024-10-05Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-10-05统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10HTML项目1Move项目1Python项目1精选Rust资源清单 创建周期:3733 天开发语言:Rust协议类型:Creative Commons Zero v1.0 Universal…

Ubuntu QT 交叉编译环境搭建

文章目录 下载安装qtCreatornot a valid identifier 的错误 安装g下载并安装交叉编译器下载交叉编译器安装交叉编译器 下载编译 ARM 的Qt平台源码配置arm的QT平台 下载安装qtCreator 去QT下载官网下载对应需要的QT软件。 这里下载5.12.96版本的 改变安装包权限,…

UGUI(六大UI根基组件)

Rect Transform 各种参数 是显示pos还是width/height 还是left/top/right/bottom之类巴拉巴拉,各种混合的展示baby,都是看anchor的设置 pivot的设置影响具体数值 至于blueprint mode ,就是用了之后框框不变,who wanna do thi…

SPI通信——FPGA学习笔记14

一、简介 SPI(Serial Periphera Interface,串行外围设备接口)通讯协议,是 Motorola 公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 EEPROM、F…