JavaScript实现音乐导航效果

JavaScript实现音乐导航效果,可以分为以下步骤:

1. HTML 结构

首先需要准备一个包含音乐链接和对应导航按钮的 HTML 结构,如下所示:

<ul id="musicList">
  <li>
    <a href="music1.mp3">Music 1</a>
    <button data-src="music1.mp3">Play</button>
  </li>
  <li>
    <a href="music2.mp3">Music 2</a>
    <button data-src="music2.mp3">Play</button>
  </li>
</ul>

其中包含了多个列表项,每个列表项对应一首音乐,包含了音乐链接 a 和对应的导航按钮 buttonbutton 标签设置了 data-src 属性用于存储音乐链接。

2. JavaScript 代码

接下来,针对上述 HTML 结构,我们来编写 JavaScript 代码实现音乐导航效果,步骤如下:

2.1 获取元素和初始化

首先,我们需要获取 HTML 结构中的元素,并初始化一些变量,代码如下所示:

const musicList = document.getElementById('musicList')
const playButtons = musicList.querySelectorAll('button')
const audio = new Audio()
let currentMusicIndex = 0

其中,musicList 获取了包含音乐和导航按钮的父级元素,playButtons 获取了所有导航按钮,audio 创建了一个音频对象,currentMusicIndex 用于记录当前播放的音乐在列表中的索引。

2.2 监听导航按钮点击事件

接下来,我们需要为每个导航按钮设置点击事件监听,点击时播放对应音乐,代码如下所示:

playButtons.forEach((playButton, index) => {
  playButton.addEventListener('click', () => {
    currentMusicIndex = index
    audio.src = playButton.dataset.src
    audio.play()
  })
})

这里使用了 forEach 方法遍历所有导航按钮并为其添加了点击事件监听,点击按钮时会获取到该按钮所对应的音乐链接,设置 audio 对象的 src 属性进行播放。

2.3 监听音乐播放完成事件

最后,我们需要为音乐播放结束事件添加监听,自动播放下一首音乐,代码如下所示:

audio.addEventListener('ended', () => {
  currentMusicIndex++
  if (currentMusicIndex >= playButtons.length) {
    currentMusicIndex = 0
  }
  audio.src = playButtons[currentMusicIndex].dataset.src
  audio.play()
})

这里监听了 ended 事件,该事件会在音乐播放完成时触发,播放下一首音乐时需要判断索引是否超出音乐列表的范围,并设置 audio 对象的 src 属性进行播放。

3. 示例说明

以上代码示例为静态HTML,通过jquery 呈现音乐列表实现。代码如下:

<div id="musicList">
  <ul>
    <li>
      <a href="./assets/music/m1.mp3">Music 1</a>
      <button data-src="./assets/music/m1.mp3" class="music-item-btn">播放</button>
    </li>
    <li>
      <a href="./assets/music/m2.mp3">Music 2</a>
      <button data-src="./assets/music/m2.mp3" class="music-item-btn">播放</button>
    </li>
    <li>
      <a href="./assets/music/m3.mp3">Music 3</a>
      <button data-src="./assets/music/m3.mp3" class="music-item-btn">播放</button>
    </li>
  </ul>
</div>
// 获取元素
const playButtons = $("#musicList").find(".music-item-btn")
const audio = new Audio()
let currentMusicIndex = 0

// 监听导航按钮点击事件
playButtons.on("click", function() {
  currentMusicIndex = $(this).parent().index()
  audio.src = $(this).data("src")
  audio.play()
})

// 监听音乐播放完成事件
audio.addEventListener('ended', () => {
  currentMusicIndex++
  if (currentMusicIndex >= playButtons.length) {
    currentMusicIndex = 0
  }
  audio.src = playButtons.eq(currentMusicIndex).data("src")
  audio.play()
})

另外,根据实际需要,可以进一步优化代码,比如支持随机播放、单曲循环、暂停等功能,在此就不展开了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现音乐导航效果 - Python技术站

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

相关文章

  • html中表示颜色的方式有6位16进制代码及rgb或关键字

    在HTML中表示颜色的方式有三种,分别为6位16进制代码、RGB值以及预定义的颜色关键字。 1. 6位16进制代码 6位16进制代码是一种以#开头,后跟6位16进制数的表示颜色的方式。每两位16进制数表示颜色的R、G和B三原色分量,取值范围为00(0)至FF(255)。 示例1:表示红色(#FF0000) <div style="backgr…

    css 2023年6月9日
    00
  • CSS3实现背景透明文字不透明的示例代码

    下面是完整的攻略: CSS3实现背景透明文字不透明的示例代码 使用 rgba() 函数 可以使用CSS3 rgba() 函数指定背景颜色,其中第四个参数是颜色的透明度。同样,我们也可以使用 rgba() 函数指定文字颜色的透明度。下面是一个示例代码: .container { background-color: rgba(255, 255, 255, 0.5…

    css 2023年6月9日
    00
  • vue.js+ElementUI实现进度条提示密码强度效果

    当我们在设计一个注册页面或是修改密码的页面时,可能会需要一个密码强度提示的功能。本文将以Vue.js为主框架,结合使用ElementUI组件,为大家详细介绍如何实现一个“进度条提示密码强度”的效果。 步骤一:加载ElementUI组件库 首先,我们需要在我们的项目中加载ElementUI组件库。我们可以通过以下命令来安装ElementUI: npm inst…

    css 2023年6月9日
    00
  • HTML+CSS+JS实现的简单应用小案例分享

    让我来为大家分享一下“HTML+CSS+JS实现的简单应用小案例”的攻略。 一、准备工作: 在开始实现之前,需要先做好一些准备工作,包括基础知识的掌握、开发工具的准备等。 1.掌握基础知识 HTML:了解 HTML 标签的基本使用方法,掌握常用标签和属性的含义; CSS:掌握 CSS 的基础语法和常用属性; JavaScript:了解 JavaScript …

    css 2023年6月9日
    00
  • 解决vant中 tab栏遇到的坑 van-tabs

    下面我将详细讲解“解决vant中tab栏遇到的坑 van-tabs”的完整攻略,希望对您有所帮助。 1. 问题描述 在使用Vant UI库中的Tab栏组件van-tabs时,有些情况下会遇到页面渲染异常的情况,具体表现为: Tab栏无法正常切换 当切换Tab时,对应的内容区域没有显示出来 当页面有滚动效果时,Tab栏不能随之滚动 这些问题通常是由于我们没有正…

    css 2023年6月10日
    00
  • CSS选择器中的正则表达式使用

    在CSS选择器中使用正则表达式可以更加灵活地选择元素,以下是关于CSS选择器中正则表达式使用的完整攻略,包括两个示例说明: 1. 正则表达式基础 正则表达式是一种用于匹配文本的模式。在CSS选择器中,可以使用正则表达式来匹配元素的属性值。以下是一些常用的正则表达式符号: ^:匹配以指定字符开头的字符串。 $:匹配以指定字符结尾的字符串。 *:匹配前面的字符零…

    css 2023年5月18日
    00
  • 如何使用python docx模块操作word文档

    使用Python的docx模块可以方便地操作Word文档,下面将详细讲解操作步骤: 安装docx模块 首先需要安装docx模块,可以使用pip命令进行安装,命令如下: pip install python-docx 打开Word文档 使用docx模块可以通过以下步骤打开Word文档: import docx # 打开Word文档 doc = docx.Doc…

    css 2023年6月10日
    00
  • jQuery子属性过滤选择器用法分析

    以下是关于“jQuery子属性过滤选择器用法分析”的完整攻略: 什么是jQuery子属性过滤选择器? 在jQuery中,我们可以使用选择器来选取特定的元素。而子属性过滤选择器是一种特殊的选择器,它可以根据元素的子属性来筛选元素。 语法格式 子属性过滤选择器的语法格式如下: $("[attribute$=’value’]") 其中 attr…

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