原生JS实现小小的音乐播放器

yizhihongxing

原生JS实现小小的音乐播放器

概述

小小的音乐播放器是一个使用原生JS实现的简单的Web音乐播放器,由于功能简单,易于理解和操作,因此适合JS初学者学习。本攻略将分为以下几个部分:

  1. 开始
  2. HTML结构
  3. CSS样式
  4. JS功能
  5. 示例说明
  6. 结束

开始

首先,我们需要一个开发环境,可以使用如下几种:

  1. Notepad++
  2. Visual Studio Code
  3. Atom
  4. Sublime Text

在这里,我们以Visual Studio Code为例,进行说明。

HTML结构

接着,我们将使用HTML来定义播放器的界面结构。实现的音乐播放器有如下几个组成部分:

  • 播放/暂停按钮
  • 进度条
  • 声音控制条
  • 歌曲时间/总时间显示框
  • 音量/音量静音按钮
  • 音乐标题

HTML代码如下:

<div class="audio-player">
  <div class="controls">
    <button id="play-pause-button" class="play"></button>
    <div class="progress-bar">
      <div id="progress"></div>
    </div>
    <div class="time-indicator">
      <span id="time">0:00</span> / <span id="duration">0:00</span>
    </div>
    <div class="volume">
      <button id="volume-button" class="unmute"></button>
      <input type="range" id="volume-slider" min="0" max="1" step="0.01" value="1">
    </div>
  </div>
  <div class="song-info">
    <span id="song-title">Song title</span>
  </div>
  <audio id="audio-player">
    <source src="music.mp3" type="audio/mpeg">
  </audio>
</div>

CSS样式

在HTML部分完成后,我们需要为其内部元素定义CSS样式。CSS代码如下:

.audio-player {
  width: 360px;
  background-color: #333;
  color: #fff;
  font-family: Arial, sans-serif;
  padding: 20px;
  border-radius: 10px;
}

.controls {
  display: flex;
  align-items: center;
  margin-bottom: 10px;
}

.progress-bar {
  flex-grow: 1;
  margin: 0 10px;
  height: 5px;
  background-color: #666;
}

.progress-bar #progress {
  height: 100%;
  background-color: #fff;
  width: 0%;
  transition: width 0.1s linear;
}

.time-indicator {
  font-size: 12px;
}

.volume {
  display: flex;
  align-items: center;
  margin-left: 10px;
}

.volume input[type="range"] {
  -webkit-appearance: none;
  width: 50px;
  height: 5px;
  background-color: #666;
  margin-left: 10px;
}

.volume input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none;
  background-color: #fff;
  height: 16px;
  width: 16px;
  border-radius: 50%;
  cursor: pointer;
}

.song-info {
  text-align: center;
  font-size: 18px;
  margin-top: 10px;
}

#song-title {
  font-weight: bold;
}

button {
  background-color: transparent;
  border: none;
  cursor: pointer;
  margin-right: 10px;
  width: 20px;
  height: 20px;
  padding: 0;
}

.play::before {
  content: "►";
  font-size: 18px;
}

.pause::before {
  content: "❚❚";
  font-size: 18px;
}

.unmute::before {
  content: "?";
  font-size: 12px;
}

.mute::before {
  content: "?";
  font-size: 12px;
}

JS功能

HTML和CSS部分完成后,我们需要使用JS实现播放器的主要功能。具体来说,我们至少需要实现如下几个功能:

  1. 播放/暂停歌曲
  2. 显示歌曲时间/总时间
  3. 改变播放进度
  4. 改变音量
  5. 静音/取消静音

完整的JS代码如下:

const audio = document.getElementById("audio-player");
const playPauseButton = document.getElementById("play-pause-button");
const progress = document.getElementById("progress");
const timeDisplay = document.getElementById("time");
const durationDisplay = document.getElementById("duration");
const volumeButton = document.getElementById("volume-button");
const volumeSlider = document.getElementById("volume-slider");
const songTitle = document.getElementById("song-title");

function playPause() {
  if (audio.paused) {
    audio.play();
    playPauseButton.classList.remove("play");
    playPauseButton.classList.add("pause");
  } else {
    audio.pause();
    playPauseButton.classList.remove("pause");
    playPauseButton.classList.add("play");
  }
}

function updateTime() {
  timeDisplay.innerHTML = formatTime(audio.currentTime);
  progress.style.width = (audio.currentTime / audio.duration) * 100 + "%";
}

function updateDuration() {
  durationDisplay.innerHTML = formatTime(audio.duration);
}

function changeTime(e) {
  const newTime = e.offsetX / progress.clientWidth * audio.duration;
  audio.currentTime = newTime;
}

function changeVolume() {
  audio.volume = volumeSlider.value;
  if (audio.volume === 0) {
    volumeButton.classList.remove("unmute");
    volumeButton.classList.add("mute");
  } else {
    volumeButton.classList.remove("mute");
    volumeButton.classList.add("unmute");
  }
}

function mute() {
  if (audio.volume !== 0) {
    audio.volume = 0;
    volumeButton.classList.remove("unmute");
    volumeButton.classList.add("mute");
  } else {
    audio.volume = volumeSlider.value;
    volumeButton.classList.remove("mute");
    volumeButton.classList.add("unmute");
  }
}

function formatTime(time) {
  const minutes = Math.floor(time / 60);
  const seconds = Math.round(time % 60);
  return `${minutes}:${seconds < 10 ? "0" : ""}${seconds}`;
}

audio.addEventListener("timeupdate", updateTime);
audio.addEventListener("loadedmetadata", updateDuration);
progress.parentElement.addEventListener("click", changeTime);
volumeSlider.addEventListener("input", changeVolume);
volumeButton.addEventListener("click", mute);
playPauseButton.addEventListener("click", playPause);

示例说明

以上代码实现了一个简单的音乐播放器,您可以在自己的网站或浏览器中使用它播放MP3格式的音乐文件。在使用过程中,您可以试着进行以下两种修改,来感受代码的实际效果:

  1. 将"music.mp3"替换为您自己的音乐文件路径,在index.html中更新。
  2. 修改CSS样式,将音乐播放器的UI界面进行自定义。

结束

至此,我们已经完成了“原生JS实现小小的音乐播放器”的攻略。希望这篇文章对您有所帮助并且对您的JS学习有所帮助。如果您有任何问题或者建议,请在下方评论区留言。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS实现小小的音乐播放器 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript reduce方法使用方法介绍

    当我们需要对数组进行一系列的计算操作时,reduce()方法就非常有用了。本篇攻略将带您详细了解JavaScript中的reduce()方法,包括使用方法、参数、返回值。 reduce()方法介绍 reduce()方法是JavaScript数组的高阶函数之一,其作用在于通过遍历数组中的所有元素并将它们累加起来,最终返回一个结果。 array.reduce(c…

    JavaScript 2023年6月10日
    00
  • javascript实现计时器的简单方法

    下面我将为你详细讲解“Javascript实现计时器的简单方法”的攻略。 前言 在Web应用程序中,我们经常需要实现一些计时相关功能,例如倒计时、计时器等等。Javascript提供了很多实现计时相关功能的方法,其中比较常见的是使用setInterval()函数实现计时器。 实现思路 实现一个计时器的主要思路是:获取计时的开始时间start_time,然后不…

    JavaScript 2023年5月27日
    00
  • JS自动倒计时30秒后按钮才可用(两种场景)

    当我们需要用户在规定时间内完成某些操作,而不希望用户在规定时间之前提交多次请求时,可以使用JS自动倒计时,以此限制用户在规定时间之前不能再触发该操作。 以下是JS自动倒计时的完整攻略,包含两种场景的具体实现方法。 场景一:按钮点击后30秒后才可再次触发 HTML代码 首先,我们需要在HTML代码中创建一个按钮,例如以下代码: <button id=&q…

    JavaScript 2023年6月10日
    00
  • jquery实现浮动在网页右下角的彩票开奖公告窗口代码

    下面我将详细讲解“jquery实现浮动在网页右下角的彩票开奖公告窗口代码”的攻略。 基本思路 我们的目标是实现一个浮动在网页右下角的彩票开奖公告窗口。具体实现思路如下: 在页面底部右下角添加一个固定宽度和高度的 div 元素,设置其 position 属性为 fixed,bottom 和 right 属性为 0,这样就可以让该元素始终浮动在页面的右下角。 在…

    JavaScript 2023年6月11日
    00
  • Ajax异步请求技术实例讲解

    Ajax异步请求技术实例讲解 Ajax是一种在不重新加载网页的情况下,能够实现与服务器进行数据交互的技术,它可以帮助我们通过JavaScript向服务器发起异步请求,并在请求成功后执行一定的操作,例如更新页面内容等。 Ajax的基本使用方法 在JavaScript中使用Ajax,需要用到XMLHttpRequest对象,通过该对象来向服务器发起请求并获取响应…

    JavaScript 2023年6月11日
    00
  • 详谈JS中数组的迭代方法和归并方法

    详谈JS中数组的迭代方法和归并方法 什么是迭代方法? 在JavaScript中,迭代方法是一种对数组进行操作的函数,在数组中迭代每一个元素并执行指定的操作,最终返回一个新的数组或其他值。常见的迭代方法有forEach()、map()、filter()、some() 和 every() 等。 示例 1:forEach() forEach() 方法用于遍历每个元…

    JavaScript 2023年5月27日
    00
  • vue3项目中使用tinymce的方法

    下面是vue3项目中使用tinymce编辑器的完整攻略: 安装tinymce 首先,在终端中通过npm包管理器安装tinymce: npm install tinymce –save 引入tinymce 在需要使用的组件中引入tinymce的js文件: <template> <div> <textarea id="e…

    JavaScript 2023年6月11日
    00
  • 实例讲解JS中setTimeout()的用法

    当需要在一定时间延迟之后再执行一段代码时,可以使用JavaScript中的setTimeout()函数。setTimeout()的语法格式为: setTimeout(function, milliseconds, parameter1, parameter2, …) 其中,function是要执行的函数,milliseconds是延迟的毫秒数,param…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部