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

原生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日

相关文章

  • js实现跳一跳小游戏

    JS实现跳一跳小游戏,主要分为以下几个步骤: HTML结构:在HTML中需要准备一个游戏容器div和一个小人的img标签。 <div id="game-container"> <img src="little-man.png" id="little-man"> <div…

    JavaScript 2023年6月11日
    00
  • 详解如何在Javascript中使用Object.freeze()

    当我们在编写Javascript代码时,经常会遇到需要限制某个对象不被修改的情况。这时候,我们可以使用Object.freeze()方法来冻结该对象,使其成为只读对象。本文将详细讲解如何在Javascript中使用Object.freeze()方法,并提供两个实例说明。 1. Object.freeze()方法的使用方法 Object.freeze()方法允…

    JavaScript 2023年5月27日
    00
  • js实现的万能flv网页播放器代码

    关于“js实现的万能flv网页播放器代码”的攻略,可以分为以下几个步骤: 1. 准备工作 在开始编写代码之前,我们需要准备以下三个必备元素:flv.js库、video.js库、以及我们要播放的flv文件。 flv.js:是一个轻量级的HTTP-FLV播放器库,可以用于浏览器内嵌播放Flv视频文件,它是基于浏览器原生的Media Source Extensio…

    JavaScript 2023年5月28日
    00
  • Bootstrap每天必学之模态框(Modal)插件

    Bootstrap每天必学之模态框(Modal)插件 什么是模态框 模态框(Modal)是一种弹出窗口,用于在Web页面上显示信息。模态框会在加载时居中显示,并且在关闭前将防止用户与原始页面进行任何交互。Bootstrap框架提供了内置的模态框插件,使这一过程变得非常方便。 如何创建模态框 要创建一个模态框,您需要执行以下步骤: 在HTML中创建一个触发器(…

    JavaScript 2023年6月11日
    00
  • 解决layui的table.checkStatus失效问题

    当我们使用layui的table组件进行表格渲染时,可能会遇到table.checkStatus()失效的问题。这个问题通常出现在表格内容为动态加载,并且通过ajax请求获取的情况下。下面就针对这个问题,提供一些解决方法。 解决方法一:事件代理 事件代理是在父级元素上监听子级元素的事件,然后在子级元素被点击时进行处理。在这个问题中,我们可以通过在table的…

    JavaScript 2023年5月27日
    00
  • Eclipse配置Javascript开发环境图文教程

    针对你提出的问题,我会为你提供一份完整的Markdown文件,其中包含了标题、代码块和示例等元素。请仔细阅读,如果还有什么问题欢迎继续咨询。 Eclipse配置Javascript开发环境图文教程 介绍 Eclipse是一个非常流行的开发工具,可以用来开发多种编程语言。在这篇教程中,我们将会学到如何将Eclipse配置为Javascript开发环境。 步骤 …

    JavaScript 2023年5月27日
    00
  • html的DOM中document对象images集合用法实例

    下面是关于“HTML的DOM中document对象images集合用法实例”的完整攻略: 什么是DOM中的document对象images集合 在HTML的DOM中,每个图片元素都被定义为标签。而通过document对象的images集合,我们可以获取到文档中的所有图片元素,并对其进行一系列的操作,比如更改图片路径、设置图片样式等等。 document对象i…

    JavaScript 2023年6月10日
    00
  • javascript变量提升和闭包理解

    请参考以下攻略: JavaScript变量提升 什么是变量提升? 变量提升是 Javascript 中的一种特性,它指的是在代码执行前,所有的变量声明都会被提升到代码的开头部分,但是赋值操作并不会被提升。也就是说,变量声明后的变量名可以在声明之前被使用,但是变量值会返回 undefined。 示例一: console.log(a); // Output: u…

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