每天总结一个html标签——Audio音频标签

news2025/7/24 10:21:33

Audio标签

文章目录

  • Audio标签
    • 一、audio标签的定义与介绍
      • 1. 定义介绍
      • 2. 语法
      • 3. 支持的格式
      • 4.文本提示
    • 二、audio标签的HTML属性
      • 1. autoplay
      • 2. loop
      • 3. muted
      • 4. preload
    • 三、audio标签的常用DOM属性
    • 四、audio标签的常用事件
    • 四、默认样式
    • 五、自定义样式
      • 1. 示例
      • 2. 代码
    • 六、播放 m3u8音频
    • 七、其他用于播放音频的外部库

一、audio标签的定义与介绍

1. 定义介绍

<audio> 标签是 HTML5 中的一个新元素,它允许开发者直接在 HTML 文档中嵌入音频文件,用户无需安装额外的插件即可播放音频。这一特性大大提升了用户体验,同时也简化了开发者的工作流程。通过 <audio> 标签,我们可以轻松地控制音频的播放、暂停、音量等功能,并且可以支持多种音频格式。

2. 语法

<audio> 标签的基本语法非常简单,以下是一个最基本的示例:

<audio src="sample-15s.mp3" controls></audio>

在这个示例中,src 属性指定了音频文件的路径,这里的 sample-15s.mp3 是音频文件的名称。controls 属性是一个布尔属性,当添加该属性时,浏览器会显示一个默认的音频控制界面,用户可以通过这个界面来控制音频的播放、暂停、音量等操作。

除了基本的 srccontrols 属性外,<audio> 标签还支持多个其他属性,例如 autoplayloopmuted 等。下面是一个包含多个属性的示例:

<audio src="sample-15s.mp3" controls autoplay loop muted></audio>

在这个示例中,autoplay 属性表示音频会在页面加载完成后自动播放;loop 属性表示音频会循环播放;muted 属性表示音频会静音播放。

3. 支持的格式

不同的浏览器对音频格式的支持情况有所不同。为了确保音频能够在大多数浏览器中正常播放,我们通常需要提供多种格式的音频文件。<audio> 标签支持的常见音频格式有 MP3、WAV 和 Ogg。

  • MP3:这是一种广泛使用的音频压缩格式,具有较高的压缩比和较好的音质,几乎所有的浏览器都支持 MP3 格式。
  • WAV:这是一种无损音频格式,音质非常好,但文件体积较大,主要用于专业音频处理和一些对音质要求较高的场景。
  • Ogg:这是一种开放的音频压缩格式,具有较好的压缩比和音质,并且在一些开源浏览器中得到了广泛的支持。

为了兼容不同的浏览器,我们可以在 <audio> 标签中使用多个 <source> 标签来指定不同格式的音频文件,示例如下:

<audio controls>
  <source src="sample-15s.mp3" type="audio/mpeg">
  <source src="sample-15s.ogg" type="audio/ogg">
  <source src="sample-15s.wav" type="audio/wav">
  您的浏览器不支持音频播放。
</audio>

在这个示例中,浏览器会按照 <source> 标签的顺序依次尝试加载音频文件,如果第一个文件无法加载,则会尝试加载第二个文件,以此类推。如果所有的文件都无法加载,则会显示 <audio> 标签内的文本信息。

4.文本提示

<audio> 标签中,我们可以添加一些文本提示信息,当浏览器不支持音频播放时,这些信息会显示给用户。例如:

<audio controls>
  <source src="sample-15s.mp3" type="audio/mpeg">
  您的浏览器不支持音频播放,请升级您的浏览器或安装相关插件。
</audio>

这样,当用户使用的浏览器不支持音频播放时,就会看到相应的提示信息。

二、audio标签的HTML属性

1. autoplay

autoplay 是一个布尔属性,当添加该属性时,音频会在页面加载完成后自动播放。需要注意的是,由于用户体验和流量消耗的问题,一些浏览器会对自动播放功能进行限制,例如 Chrome 浏览器会在用户与页面进行交互之前禁止自动播放音频和视频。示例如下:

<audio src="sample-15s.mp3" autoplay></audio>

2. loop

loop 也是一个布尔属性,当添加该属性时,音频会在播放结束后自动重新开始播放,实现循环播放的效果。示例如下:

<audio src="sample-15s.mp3" loop></audio>

3. muted

muted 属性用于将音频静音。当添加该属性时,音频会在播放时静音,但用户仍然可以通过控制界面调整音量。示例如下:

<audio src="sample-15s.mp3" muted></audio>

4. preload

preload 属性用于控制浏览器如何预加载音频文件。它有三个可选值:

  • none:表示浏览器不会预加载音频文件。
  • metadata:表示浏览器会预加载音频的元数据,如音频的时长、比特率等。
  • auto:表示浏览器会尽可能地预加载整个音频文件。
    示例如下:
<audio src="sample-15s.mp3" preload="metadata"></audio>

三、audio标签的常用DOM属性

DOM 属性解释
currentTime获取或设置音频的当前播放位置(以秒为单位)。
duration获取音频的总时长(以秒为单位),如果音频不可用则返回 NaN
paused返回一个布尔值,表示音频是否处于暂停状态。
ended返回一个布尔值,表示音频是否已经播放结束。
muted获取或设置音频是否静音。
volume获取或设置音频的音量,取值范围从 0.0(静音)到 1.0(最大音量)。
playbackRate获取或设置音频的播放速度,1.0 为正常速度。
buffered返回一个 TimeRanges 对象,包含音频已缓冲的时间范围。
seeking返回一个布尔值,表示浏览器是否正在尝试跳转到新的播放位置。

四、audio标签的常用事件

完整事件请参考:

  • MDN-https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLMediaElement
  • 菜鸟教程-https://www.runoob.com/tags/ref-av-dom.html
事件名称触发条件用途示例
canplay音频文件可以播放时可在此时执行一些初始化操作,如显示播放按钮等
play音频开始播放时可用于记录播放开始时间、更新播放状态等
pause音频暂停时可用于暂停相关的业务逻辑,如暂停动画等
ended音频播放结束时可用于实现自动播放下一首音频等功能
timeupdate音频的播放位置发生变化时可用于显示当前播放时间、更新进度条等

四、默认样式

浏览器会为 <audio> 标签提供一个默认的控制界面,这个界面的样式会因浏览器的不同而有所差异。默认的控制界面通常包含播放/暂停按钮、进度条、音量控制等元素。

  • 默认控制界面的display是inline
  • 可以设置宽高,边框等。
  • 不能设置音频播放器中的单个组件(如改变按钮大小、改变图标或字体等)
    在这里插入图片描述

五、自定义样式

要自定义 <audio> 标签的样式,我们可以通过 JavaScript 来创建自定义的控制界面,并使用 CSS 来对其进行样式设计。以下是一个简单的示例:

1. 示例

音频样式示例

2. 代码

<style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            background-color: #f4f4f9;
        }
        .audio-container {
            width: 600px;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            padding: 25px;
            border-radius: 15px;
            display: flex;
            align-items: center;
            box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
        }
        .control {
            width: 350px;
            height: 120px;
            display: flex;
            flex-direction: column;
            justify-content: space-around;
            align-items: center;
        }
        .btn-container {
            display: flex;
            align-items: center;
        }
        .play-pause-btn, .nav-btn {
            width: 45px;
            height: 45px;
            background-color: rgba(255, 255, 255, 0.1);
            border: 2px solid rgba(255, 255, 255, 0.5);
            border-radius: 50%;
            color: white;
            cursor: pointer;
            margin: 0 8px;
            transition: all 0.3s ease;
            backdrop-filter: blur(10px);
        }
        .play-pause-btn:hover, .nav-btn:hover {
            background-color: rgba(255, 255, 255, 0.2);
            transform: scale(1.05);
        }
        .progress-bar {
            width: 300px;
            height: 6px;
            background-color: rgba(255, 255, 255, 0.3);
            margin: 0 10px;
            border-radius: 3px;
        }
        .progress {
            height: 100%;
            background-color: white;
            width: 0%;
            border-radius: 3px;
            transition: width 0.1s linear;
        }
        .time-display, .cover {
            color: white;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        }
        .time-display {
            margin: 0 10px;
            font-size: 14px;
        }
        .cover {
            width: 150px;
            height: 150px;
            background-color: rgba(255, 255, 255, 0.1);
            margin-left: auto;
            display: flex;
            align-items: center;
            justify-content: center;
            border-radius: 10px;
            border: 2px solid rgba(255, 255, 255, 0.5);
            backdrop-filter: blur(10px);
            font-size: 18px;
        }
    </style>
</head>

<body>
    <div class="audio-container">
        <div class="control">
            <div class="btn-container">
                <button class="nav-btn" id="prevBtn">◀◀</button>
                <button class="play-pause-btn" id="playPauseBtn"></button>
                <button class="nav-btn" id="nextBtn">▶▶</button>
            </div>
            <div class="progress-bar">
                <div class="progress" id="progress"></div>
                <div class="time-display" id="timeDisplay">00:00 / 00:00</div>
            </div>

        </div>
        <div class="cover">歌曲封面</div>
    </div>
    <audio id="myAudio" src="sample-15s.mp3"></audio>
    <script>
        const audio = document.getElementById('myAudio');
        const playPauseBtn = document.getElementById('playPauseBtn');
        const progress = document.getElementById('progress');
        const timeDisplay = document.getElementById('timeDisplay');

        const formatTime = (seconds) => {
            const minutes = Math.floor(seconds / 60);
            seconds = Math.floor(seconds % 60);
            return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
        };

        audio.addEventListener('loadedmetadata', function () {
            timeDisplay.textContent = `00:00 / ${formatTime(audio.duration)}`;
        });

        playPauseBtn.addEventListener('click', function () {
            if (audio.paused) {
                audio.play();
                playPauseBtn.textContent = '⏸';
            } else {
                audio.pause();
                playPauseBtn.textContent = '▶';
            }
        });

        audio.addEventListener('timeupdate', function () {
            const progressPercent = (audio.currentTime / audio.duration) * 100;
            progress.style.width = `${progressPercent}%`;
            timeDisplay.textContent = `${formatTime(audio.currentTime)} / ${formatTime(audio.duration)}`;
        });
    </script>
</body>

在这个示例中,我们创建了一个自定义的音频控制界面,包括播放/暂停按钮和进度条。通过 JavaScript 监听音频的事件,我们可以实现对音频的控制,并更新进度条的状态。

六、播放 m3u8音频

M3U8 是一种基于 HTTP Live Streaming (HLS) 协议的音频和视频播放列表文件格式,常用于在线流媒体播放。要在网页中播放 M3U8 文件,我们可以使用一些第三方库,如 hls.js。以下是一个简单的示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>播放 M3U8 文件</title>
</head>
<body>
  <audio id="myAudio" controls></audio>
  <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
  <script>
    const audio = document.getElementById('myAudio');
    if (Hls.isSupported()) {
      const hls = new Hls();
      hls.loadSource('your-m3u8-file.m3u8');
      hls.attachMedia(audio);
      hls.on(Hls.Events.MANIFEST_PARSED, function() {
        audio.play();
      });
    } 
  </script>
</body>
</html>

在这个示例中,我们引入了 hls.js 库,并使用它来加载和播放 M3U8 文件。如果浏览器支持 HLS 协议,我们会使用 hls.js 来处理;

七、其他用于播放音频的外部库

例如:plyr.js、howler.js、wavesurfer.js 等。这些库提供了更多的功能和自定义选项,使音频播放更加灵活和方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2400609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web3-Remix部署智能合约到“荷兰式”拍卖及以太坊gas费机制细讲

web3-Remix部署智能合约到“荷兰式”拍卖及以太坊gas费机制细讲 一、使用Remix演示智能合约部署 智能合约的代码编写一般都是在Remix上&#xff0c;Remix的好处的话就是可以在浏览器中快速开发和部署合约&#xff0c;无需在本地安装任何程序&#xff0c;十分适合新手。 对应…

网络编程及原理(一)

目录 一 . 独立模式与网络互联 二 . 局域网 —— LAN &#xff08;1&#xff09;基于网线直连 &#xff08;2&#xff09;基于集线器组建 &#xff08;3&#xff09;基于交换机组建 &#xff08;4&#xff09;基于交换机和路由器组建 三 . 广域网 —— WAN 四 …

【Linux】进程 信号保存 信号处理 OS用户态/内核态

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、信号保存 ✨进程如何完成对信号的保存&#xff1f; ✨在内核中的表示 ✨sigset_t ✨信号操作函数 &#x1fa84;sigprocmask --- 获取或设置当前进程的 block表 &#x1fa84;s…

[ Qt ] | 与系统相关的操作(一):鼠标相关事件

目录 信号和事件的关系 (leaveEvent和enterEvent) 实现通过事件获取鼠标进入和鼠标离开 (mousePressEvent) 实现通过事件获得鼠标点击的位置 (mouseReleaseEvent) 前一个的基础上添加鼠标释放事件 (mouseDoubleClickEvent) 鼠标双击事件 鼠标移动事件 鼠标滚轮事件 …

stm32使用hal库模拟spi模式3

因为网上模拟spi模拟的都是模式0&#xff0c;很少有模式3的。 模式3的时序图&#xff0c;在clk的下降沿切换电平状态&#xff0c;在上升沿采样&#xff0c; SCK空闲为高电平 初始化cs&#xff0c;clk&#xff0c;miso&#xff0c;mosi四个io。miso配置为输入&#xff0c;cs、c…

OurBMC技术委员会2025年二季度例会顺利召开

5月28日&#xff0c;OurBMC社区技术委员会二季度例会顺利召开。本次会议采用线上线下结合的方式&#xff0c;各委员在会上听取了OurBMC社区二季度工作总结汇报&#xff0c;规划了2025年三季度的重点工作。 会上&#xff0c;技术委员会主席李煜汇报了社区2025年二季度主要工作及…

postman自动化测试

目录 一、相关知识 1.网络协议 2.接口测试 3.编写测试用例 4.系统架构 二、如何请求 1.get请求 ​编辑2.post请求 3.用环境变量请求 4.Postman测试沙箱 一、相关知识 1.网络协议 规定数据信息发送与解析的方式。 网络传输协议 https相比http&#xff0c;信息在网…

力扣热题100之二叉树的直径

题目 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 代码 方法&#xff1a;递归 计算二叉树的直径可以理解…

数字人技术的核心:AI与动作捕捉的双引擎驱动(210)

**摘要&#xff1a;**数字人技术从静态建模迈向动态交互&#xff0c;AI与动作捕捉技术的深度融合推动其智能化发展。尽管面临表情僵硬、动作脱节、交互机械等技术瓶颈&#xff0c;但通过多模态融合技术、轻量化动捕方案等创新&#xff0c;数字人正逐步实现自然交互与情感表达。…

针对KG的神经符号集成综述 两篇

帖子最后有五篇综述的总结。 综述1 24年TKDD 系统性地概述了神经符号知识图谱推理领域的进展、技术和挑战。首先介绍了知识图谱&#xff08;KGs&#xff09;和符号逻辑的基本概念&#xff0c;知识图谱被视为表示、存储和有效管理知识的关键工具&#xff0c;它将现实世界的知识…

RabbitMQ和MQTT区别与应用

RabbitMQ与MQTT深度解析&#xff1a;协议、代理、差异与应用场景 I. 引言 消息队列与物联网通信的重要性 在现代分布式系统和物联网&#xff08;IoT&#xff09;生态中&#xff0c;高效、可靠的通信机制是构建稳健、可扩展应用的核心。消息队列&#xff08;Message Queues&am…

Axure设计案例:滑动拼图解锁

设计以直观易懂的操作方式为核心&#xff0c;只需通过简单的滑动动作&#xff0c;将拼图块精准移动至指定位置&#xff0c;即可完成解锁。这种操作模式既符合用户的日常操作习惯&#xff0c;在视觉呈现上&#xff0c;我们精心设计拼图图案&#xff0c;融入生动有趣的元素&#…

MySQL权限详解

在MySQL中&#xff0c;权限管理是保障数据安全和合理使用的重要手段。MySQL提供了丰富的权限控制机制&#xff0c;允许管理员对不同用户授予不同级别的操作权限。本文将会对MySQL中的权限管理&#xff0c;以及内核如何实现权限控制进行介绍。 一、权限级别 MySQL 的权限是分层…

解决fastadmin、uniapp打包上线H5项目路由冲突问题

FastAdmin 基于 ThinkPHP&#xff0c;默认采用 URL 路由模式&#xff08;如 /index.php/module/controller/action&#xff09;&#xff0c;且前端资源通常部署在公共目录&#xff08;如 public/&#xff09;下。Uniapp 的历史模式需要将所有前端路由请求重定向到 index.html&a…

web3-区块链的交互性以及编程的角度看待智能合约

web3-区块链的交互性以及编程的角度看待智能合约 跨链交互性 交互性 用户在某一区块链生态上拥有的资产和储备 ​ 目标&#xff1a;使用户能够把资产和储备移动到另一个区块链生态上 可组合性 使在某一区块链的DAPP能调用另一个区块链上的DAPP 如果全世界都在用以太坊就…

数据结构(7)—— 二叉树(1)

目录 前言 一、 树概念及结构 1.1树的概念 1.2树的相关概念 1.3数的表示 1.二叉树表示 2.孩子兄弟表示法 3.动态数组存储 1.4树的实际应用 二、二叉树概念及结构 2.1概念 2.2特殊的二叉树 1.满二叉树 2. 完全二叉树 2.3二叉树的性质 2.4二叉树的存储结构 1.顺序存储 2.链式存储…

如何使用 Docker 部署grafana和loki收集vllm日志?

环境: Ubuntu20.04 grafana loki 3.4.1 问题描述: 如何使用 Docker 部署grafana和loki收集vllm日志? 解决方案: 1.创建一个名为 loki 的目录。将 loki 设为当前工作目录: mkdir loki cd loki2.将以下命令复制并粘贴到您的命令行中,以将 loki-local-config.yaml …

Kafka入门- 基础命令操作指南

基础命令 主题 参数含义–bootstrap-server连接的Broker主机名称以及端口号–topic操作的topic–create创建主题–delete删除主题–alter修改主题–list查看所有主题–describe查看主题的详细描述–partitions设置分区数–replication-factor设置分区副本–config更新系统默认…

目标检测我来惹1 R-CNN

目标检测算法&#xff1a; 识别图像中有哪些物体和位置 目标检测算法原理&#xff1a; 记住算法的识别流程、解决问题用到的关键技术 目标检测算法分类&#xff1a; 两阶段&#xff1a;先区域推荐ROI&#xff0c;再目标分类 region proposalCNN提取分类的目标检测框架 RC…

lua的笔记记录

类似python的eval和exec 可以伪装成其他格式的文件&#xff0c;比如.dll 希望在异常发生时&#xff0c;能够让其沉默&#xff0c;即异常捕获。而在 Lua 中实现异常捕获的话&#xff0c;需要使用函数 pcall&#xff0c;假设要执行一段 Lua 代码并捕获里面出现的所有错误&#xf…