lyric-parser
lyric-parser copied to clipboard
使用网易云音乐API返回的歌词,调用play()后歌词不会滚动
lyric.js
this.lines.push({
time: parseInt(result[1]) * 60 * 1000 +
parseInt(result[2]) * 1000 +
(parseInt(result[3]) || 0),
txt: txt
});
这个插件的针对网易云音乐API
的返回歌词格式的时间计算有bug,本来JS字符串遇到 *
会自动转换成数字,但是在这里自动转换会有bug,需要将源码中的上述转换 时分秒 到 毫秒 的代码,全部手动parseInt()
转换成数字
该bug可导致: play() 函数调用后,歌词好像不会滚动
看了源码之后:
和我之前猜想的一样,内部的计时器setTimeout
,并不是没有调用,而是因为歌词间隔时间计算bug,导致delay
--间隔时间
很大,毫秒转换多了一个或几个 0 ,导致短时间内看不到滚动
上述bug描述有误,跟自动转换没有关系,请看最新的
在lyric.js更改
this.lines.push({
time: result[1] * 60 * 1000 +
result[2] * 1000 +
(parseInt(result[3]) || 0),
txt: txt
});
这个插件的针对网易云音乐API
的返回歌词格式的时间计算有 bug,JS 字符串遇到 *
会自动转换成数字,但源码中最后一个加数没有遇到*
,最后一个数会被当成字符串拼接在前面数字后面,所以计算错误。需要将源码中的上述转换 时分秒 到 毫秒 的代码的最后一个加数转换成数字
此处parseInt()
也有坑
parseInt('011') === 11 // true
parseInt(011) === 9 // true
// 因为实参是字符串才能正确转换,并且自动转换和parseInt表现一致