当前位置:首页 > JavaScript

js实现音乐播放

2026-01-16 13:49:29JavaScript

使用HTML5 Audio API实现音乐播放

在JavaScript中,可以通过HTML5的Audio API轻松实现音乐播放功能。以下是基本实现方法:

// 创建Audio对象
const audio = new Audio('music.mp3');

// 播放音乐
audio.play();

// 暂停音乐
audio.pause();

// 设置音量(0-1)
audio.volume = 0.5;

// 跳转到特定时间(秒)
audio.currentTime = 30;

添加播放控制功能

为音乐播放器添加基本的UI控制:

const playBtn = document.getElementById('playBtn');
const pauseBtn = document.getElementById('pauseBtn');
const volumeSlider = document.getElementById('volume');

playBtn.addEventListener('click', () => audio.play());
pauseBtn.addEventListener('click', () => audio.pause());
volumeSlider.addEventListener('input', () => {
  audio.volume = volumeSlider.value;
});

实现播放进度条

显示并控制播放进度:

js实现音乐播放

const progressBar = document.getElementById('progress');

audio.addEventListener('timeupdate', () => {
  const progress = (audio.currentTime / audio.duration) * 100;
  progressBar.style.width = `${progress}%`;
});

progressBar.parentElement.addEventListener('click', (e) => {
  const percent = e.offsetX / e.target.clientWidth;
  audio.currentTime = percent * audio.duration;
});

处理播放列表

管理多个曲目的播放列表:

const playlist = ['song1.mp3', 'song2.mp3', 'song3.mp3'];
let currentTrack = 0;

function playTrack(index) {
  audio.src = playlist[index];
  audio.play();
}

document.getElementById('nextBtn').addEventListener('click', () => {
  currentTrack = (currentTrack + 1) % playlist.length;
  playTrack(currentTrack);
});

document.getElementById('prevBtn').addEventListener('click', () => {
  currentTrack = (currentTrack - 1 + playlist.length) % playlist.length;
  playTrack(currentTrack);
});

添加事件监听

处理音频相关事件:

js实现音乐播放

audio.addEventListener('ended', () => {
  console.log('播放结束');
  // 自动播放下一首
  currentTrack = (currentTrack + 1) % playlist.length;
  playTrack(currentTrack);
});

audio.addEventListener('canplay', () => {
  console.log('可以开始播放');
});

audio.addEventListener('error', (e) => {
  console.error('播放错误:', e);
});

响应式音量控制

实现平滑的音量渐变效果:

function fadeVolume(target, duration) {
  const initialVolume = audio.volume;
  const delta = target - initialVolume;
  const startTime = performance.now();

  function updateVolume() {
    const elapsed = performance.now() - startTime;
    const progress = Math.min(elapsed / duration, 1);
    audio.volume = initialVolume + delta * progress;

    if (progress < 1) {
      requestAnimationFrame(updateVolume);
    }
  }

  updateVolume();
}

// 淡入效果
fadeVolume(1, 2000);

可视化音频频谱

使用Web Audio API实现频谱可视化:

const audioContext = new (window.AudioContext || window.webkitAudioContext)();
const analyser = audioContext.createAnalyser();
const source = audioContext.createMediaElementSource(audio);

source.connect(analyser);
analyser.connect(audioContext.destination);
analyser.fftSize = 256;

const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);

function visualize() {
  analyser.getByteFrequencyData(dataArray);

  // 使用dataArray绘制频谱
  // 这里可以结合Canvas API绘制可视化效果

  requestAnimationFrame(visualize);
}

visualize();

标签: 音乐播放js
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promis…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="sli…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inp…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点…