vue 移动端歌词实时滚动及优化

2 篇文章 0 订阅

在做移动端酷我音乐的时候,发现歌词随着音乐滚动是一个小难点,说难也不难,但是说简单的话也不简单。大家请求歌词返回的类型可能不太一样,但是判断逻辑都是一样的。

左边是我的歌曲详情页面,右边的是我的歌词请求数据的形式,时间和歌词是一一对应的。

先盘下让歌词实时滚动的逻辑:

(下文为了便于区分两个时间参数,用newTime来表示实时获取的歌词时间,lrcTime表示请求数据中歌词的时间)

1、获取当前歌词播放的时间

2、让newTime与lrcTime相比较,当newTime>lrcTime时,让lrcTime的歌词展示在展示区域中

先来说说第一个,调用audio自带的方法:timeupdate来实时获取歌词

this.$refs.lrc是获取audio的标签 

dom操作:在audio标签中添加 ref=”自定义名字“,js中用“this.$refs.自定义名字”  进行获取当前的dom节点

使用audio便签的方法timeupdate来获取当前newTime

第二个

让歌词如何实时滚动,就上唱完的歌词往上走,未唱的歌词往上顶。

给渲染歌词列表的ul添加一个相对定位,给每一行歌词设置一个高度,当这一句歌词唱完之后,ul整体向上平移一行歌词的高度,这样就实现的歌词的滚动

用过  timeupdate  这个方法的都知道,它会一直进行返回歌曲时间,一秒之内返回4次往上,显然这个值用来执行for循环比较,因为这样的话,会在一秒之内执行4次循环,对浏览器的负担很大。

将它返回的所有值放到一个新的数组中,将重复的数值去掉,然后用watch方法来监听这个新数组长度的变化,如果新数组的长度大于老数组的长度,就说明timeupdata监听的值发生了变化,我们在将歌词循环,让newTime和lrcTime进行比较,如果newTime大于了lrcTime,便让ul向上一行歌词的长度,并且给歌词添加颜色。

这样就实现的移动端歌词的实时滚动。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qing_xing_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值