要实现LRC歌词文件的动态显示,可以通过以下步骤:

  1. 获取LRC歌词文件的内容,并解析成一个数组,每个元素表示一行歌词及其对应的时间戳。

  2. 在HTML页面中创建一个用于显示歌词的容器,比如一个div元素。

  3. 在JavaScript代码中,使用定时器setInterval()或requestAnimationFrame()来不断更新当前播放时间,并根据当前时间戳来判断应该显示哪一行歌词。

  4. 在每次更新歌词时,将当前应该显示的歌词渲染到歌词容器中,并高亮显示。

  5. 如果需要支持歌词滚动效果,可以计算出当前歌词应该显示在容器中的位置,并使用CSS的transform属性来实现滚动效果。

下面是一个简单的示例代码:

<div id="lyrics-container"></div>

<script>
  // 获取LRC歌词文件内容并解析成数组
  const lyricsText = "[00:00.00]歌词1\n[00:10.00]歌词2\n[00:20.00]歌词3";
  const lyricsArray = lyricsText.split('\n').map(line => {
    const match = line.match(/^\[(\d{2}):(\d{2})\.(\d{2})\](.*)/);
    if (match) {
      const minutes = parseInt(match[1]);
      const seconds = parseInt(match[2]);
      const milliseconds = parseInt(match[3]);
      const timestamp = minutes * 60 + seconds + milliseconds / 1000;
      const text = match[4];
      return { timestamp, text };
    } else {
      return null;
    }
  }).filter(line => line !== null);

  // 在页面中创建歌词容器
  const lyricsContainer = document.getElementById('lyrics-container');

  // 定义当前播放时间
  let currentTime = 0;

  // 更新歌词的函数
  function updateLyrics() {
    // 找到当前应该显示的歌词行
    let currentLine = null;
    for (let i = 0; i < lyricsArray.length; i++) {
      if (lyricsArray[i].timestamp <= currentTime) {
        currentLine = lyricsArray[i];
      } else {
        break;
      }
    }

    // 渲染当前歌词行
    if (currentLine) {
      lyricsContainer.innerHTML = currentLine.text;
    } else {
      lyricsContainer.innerHTML = "";
    }
  }

  // 模拟播放器不断更新当前时间
  setInterval(() => {
    currentTime += 0.1; // 假设每次更新0.1秒
    updateLyrics();
  }, 100);
</script>

原文地址: https://www.cveoy.top/t/topic/bapI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录