想用纯js实现 酷狗歌曲 同步 歌词的效果,但想了一下,如果都只是每一句话才有时间间隔,那么单句话之间的快慢如何实现同步呢,网上的实现也没找到这种,都是单句匀速和单句整体变色。
1条回答 默认 最新
关注
【以下回答由 GPT 生成】
如何使用纯JS实现酷狗歌曲同步歌词效果?
首先,要实现酷狗歌曲的同步歌词效果,我们需要获取歌曲的歌词文本,并将其按照一定格式进行解析和处理。然后,我们需要根据歌曲的播放进度,将歌词显示在网页上并进行闪动效果。
下面是一个实现此功能的示例代码:
<!DOCTYPE html> <html> <head> <style> .highlight { color: red; } </style> </head> <body> <div id="lyrics-container"></div> <script> // 假设酷狗歌曲的歌词文本如下: const lyricsText = `[00:00.00] 歌词内容... [00:05.00] 歌词内容... [00:10.00] 歌词内容... ... `; // 将歌词文本解析成时间和歌词内容的数组 function parseLyrics(lyricsText) { const lines = lyricsText.split('\n'); const lyrics = []; for (let i = 0; i < lines.length; i++) { const line = lines[i]; const match = line.match(/^\[(\d{2}):(\d{2}\.\d{2})\](.*)$/); if (match) { const minutes = parseInt(match[1]); const seconds = parseFloat(match[2]); const content = match[3]; const time = minutes * 60 + seconds; lyrics.push({ time, content }); } } return lyrics; } // 根据酷狗歌曲的播放进度显示歌词 function displayLyrics(lyrics) { const lyricsContainer = document.getElementById('lyrics-container'); let highlightedLyricIndex = -1; setInterval(() => { const currentTime = getSongCurrentTime(); // 获取当前播放时间,需自行实现获取当前播放时间的逻辑 // 找到当前时间所对应的歌词行 let currentLyricIndex = -1; for (let i = 0; i < lyrics.length; i++) { if (lyrics[i].time > currentTime) { break; } currentLyricIndex = i; } if (currentLyricIndex !== highlightedLyricIndex) { // 更新歌词显示 lyricsContainer.innerHTML = ''; for (let i = 0; i < lyrics.length; i++) { const lyricElement = document.createElement('div'); lyricElement.textContent = lyrics[i].content; if (i === currentLyricIndex) { lyricElement.className = 'highlight'; } lyricsContainer.appendChild(lyricElement); } // 更新正在高亮显示的歌词行索引 highlightedLyricIndex = currentLyricIndex; } }, 100); } // 调用解析和显示歌词的函数 const lyrics = parseLyrics(lyricsText); displayLyrics(lyrics); </script> </body> </html>
上述代码中,首先定义了一个歌词文本(lyricsText)的示例,你需要将其替换为你要显示的酷狗歌曲的歌词文本。
然后,我们使用
parseLyrics()
函数将歌词文本解析成时间和歌词内容的数组。该函数使用正则表达式匹配歌词行的时间和内容,并将其存储在一个对象中,并添加到lyrics
数组中。接下来,我们使用
displayLyrics()
函数显示歌词。该函数会在一个定时器内不断获取当前播放时间,并通过比较当前时间与歌词的时间来确定当前应该显示哪一行歌词。在每次更新歌词显示时,我们会动态创建<div>
元素来显示歌词,并使用highlight
类名为当前歌词行添加高亮样式。最后,我们调用
parseLyrics()
和displayLyrics()
函数来进行初始化。请注意,以上代码仅供参考,具体实现可能需要根据你的实际需求进行修改和扩展。另外,获取当前播放时间的逻辑需要自行实现,具体方法根据你使用的音频播放器而定。
【相关推荐】
- 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7487576
- 这篇博客也不错, 你可以看下用JS实现歌词与播放音乐同步
- 您还可以看一下 任苹蜻老师的从零开发一个iOS企业级项目实战之我的云音乐视频 教程课程中的 歌单详情显示当前播放音乐小节, 巩固相关知识点
- 除此之外, 这篇博客: js逆向爬取某音乐网站某歌手的歌曲中的 js逆向爬取某音乐网站某歌手的歌曲 部分也许能够解决你的问题。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用