当前位置:首页 > JavaScript

js实现歌词

2026-02-01 23:09:38JavaScript

实现歌词滚动效果

使用HTML和JavaScript实现歌词滚动效果需要结合音频播放器的当前时间与歌词时间轴同步。以下是实现方法:

创建HTML结构包含音频播放器和歌词显示区域:

<audio id="audioPlayer" src="song.mp3"></audio>
<div id="lyricsContainer"></div>

准备歌词数据,通常采用LRC格式的时间标签:

js实现歌词

const lyrics = [
  { time: 0.5, text: "第一句歌词" },
  { time: 3.2, text: "第二句歌词" },
  { time: 5.8, text: "第三句歌词" }
  // 更多歌词...
];

实现歌词同步逻辑:

const audio = document.getElementById('audioPlayer');
const container = document.getElementById('lyricsContainer');

audio.addEventListener('timeupdate', () => {
  const currentTime = audio.currentTime;
  let activeIndex = -1;

  lyrics.forEach((line, index) => {
    if (currentTime >= line.time && 
        (index === lyrics.length - 1 || currentTime < lyrics[index + 1].time)) {
      activeIndex = index;
    }
  });

  updateLyricsDisplay(activeIndex);
});

function updateLyricsDisplay(activeIndex) {
  container.innerHTML = '';
  lyrics.forEach((line, index) => {
    const p = document.createElement('p');
    p.textContent = line.text;
    p.className = index === activeIndex ? 'active' : '';
    container.appendChild(p);
  });

  if (activeIndex >= 0) {
    const activeLine = container.children[activeIndex];
    activeLine.scrollIntoView({ behavior: 'smooth', block: 'center' });
  }
}

添加CSS样式增强视觉效果

为歌词添加基本样式和活动歌词高亮效果:

js实现歌词

#lyricsContainer {
  height: 300px;
  overflow-y: auto;
  text-align: center;
  font-size: 18px;
  line-height: 2;
}

#lyricsContainer p.active {
  color: #ff5500;
  font-weight: bold;
  font-size: 22px;
}

处理动态加载歌词

从LRC文件或API加载歌词数据:

async function loadLyrics(url) {
  const response = await fetch(url);
  const lrcText = await response.text();
  return parseLRC(lrcText);
}

function parseLRC(lrcText) {
  const lines = lrcText.split('\n');
  const result = [];

  lines.forEach(line => {
    const timeMatch = line.match(/^\[(\d+):(\d+\.\d+)\]/);
    if (timeMatch) {
      const minutes = parseFloat(timeMatch[1]);
      const seconds = parseFloat(timeMatch[2]);
      const time = minutes * 60 + seconds;
      const text = line.replace(timeMatch[0], '').trim();
      result.push({ time, text });
    }
  });

  return result.sort((a, b) => a.time - b.time);
}

实现歌词搜索功能

为长歌词添加搜索功能:

function searchLyrics(keyword) {
  const results = lyrics.filter(line => 
    line.text.toLowerCase().includes(keyword.toLowerCase())
  );

  if (results.length > 0) {
    const firstMatchIndex = lyrics.findIndex(line => line === results[0]);
    audio.currentTime = lyrics[firstMatchIndex].time - 0.5;
    updateLyricsDisplay(firstMatchIndex);
  }
}

添加播放控制按钮

扩展播放器控制功能:

document.getElementById('playBtn').addEventListener('click', () => {
  audio.play();
});

document.getElementById('pauseBtn').addEventListener('click', () => {
  audio.pause();
});

document.getElementById('seekBack').addEventListener('click', () => {
  audio.currentTime -= 5;
});

document.getElementById('seekForward').addEventListener('click', () => {
  audio.currentTime += 5;
});

标签: 歌词js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…