600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 音乐播放器 歌词同步滚动功能实现

音乐播放器 歌词同步滚动功能实现

时间:2019-06-03 08:08:36

相关推荐

音乐播放器 歌词同步滚动功能实现

前言:这个功能也是我做vue项目运用到的,刚开始觉得好难,但是细想还是觉得尝试挑战一下。首先就是百度,发现百度真的东西很乱,广告也多。后来去B站刷大佬们的视频,才有了实现它的思路,确实很感谢B站大佬们。写下这篇博客呢,也是对我这段时间的学习总结,知识点梳理..

一、前提

因为我做的项目是要和后端进行连接,所以这里的歌词是从后端获取到的,也是经过沟通,约定好字段和格式,首先我们要实现这个功能,要了解audio标签的属性currentTime,这个属性可以设置返回音频的当前位置,也是实现歌词同步的核心之一,当然audio标签还有更多的用法,大家感兴趣可以拓展一下,这方面知识网上有不少,这里不就一一阐述了。

[00:05]作词 : 伍佰

[00:12]作曲 : 伍佰

[00:23]编曲 : 伍佰 & China Blue

[00:34]让我将你心儿摘下

[00:38]试着将它慢慢溶化

[00:41]看我在你心中是否仍完美无瑕

[00:48]是否依然为我事事牵挂

[00:52]依然爱我无法自拔

[00:55]心中是否有我未曾到过的地方啊

[01:02]那里湖面总是澄清

[01:05]那里空气充满宁静

[01:09]雪白明月照在大地

[01:12]藏着你不愿提起的回忆

[01:18]你说真心总是可以从头

[01:22]真爱总是可以长久

[01:25]为何你的眼神还有孤独时的落寞

二、实现

接下来要准备的是后端给的数据,也可以自己先找一个这样类型的数据,每句歌词前面一定要有时间戳,这也是我们判断歌词和歌曲进度的点。具体实现思路就是把歌词和歌曲时间点分别存放到数组中,转化格式,(当然也可以存放到二维数组或者json对象中,主要是把歌词和时间区分开)获取当前audio标签播放的时间点然后进行对比。再进行dom的渲染。到这里也就差不多了,逻辑思路也不是很难,下面是源码:

这里是dom元素和css样式

<template><div class="songCi"><div class="cover"><!-- 存放歌词的dom元素 --><ul class="cover-l"></ul></div></div></template><style>.songCi {width: 3.75rem;height: 100%;background-color: #191919;overflow: hidden;text-align: center;position: relative;}.songCi div{font-size: 0.16rem;transition: top 1s linear;}.songCi p{position: relative;line-height: 0.36rem;}.songCi ul{position: absolute;top: 150px;width: 400px;transition: top 1s linear;}.songCi ul>li{list-style: none;height: 30px;line-height: 30px;text-align: center;width: 400px;}.songCi span{position: absolute;left: 0.2rem;}.active{color: #269;}</style>

主要是准备过渡属性以及定位,还有移动距离和高亮样式

然后js逻辑部分是:

我这里因为是在父组件发送的请求,所以用了父子组件传值,子组件用prpos属性获取到了这个歌词,然后在watch监听中操作处理。

这里主要的思路就是,把歌词进行拆分,让每句歌词前面的时间点来动态匹配,audio的currentTime即当前播放时间。进行对比匹配,来渲染高亮区域,即当前的歌词,然后整体上移实现滚动。

好了以上就是我实现歌词同步的思路,希望对大家有所帮助。·

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。