HTML5 之 Audio 标签

HTML5 之 Audio 标签概述 audio 用于在文档中嵌入音频元素 audio 元素是 HTML5 新增的行内标签 IE8 及以下浏览器不支持 audio 标签 若浏览器不支持 video 元素或者无法播放音频 则会显示替代文本 开始和结束标签之间的内容 audiosrc music mp3 当前浏览器不支持 audio 标签标签属性 autoplay 音频会尽快自动播放 不会等待整个音频下载完成 controls 浏览器提供包括声音 播放进度 播放暂停的控制面板 不同浏览器 audiosrc music mp3

在这里插入图片描述

概述

  audio 用于在文档中嵌入音频元素。

  audio元素是HTML5新增的行内标签IE8及以下浏览器不支持audio标签。

  若浏览器不支持video元素或者无法播放音频,则会显示替代文本(开始和结束标签之间的内容)。

<audio src="music.mp3">当前浏览器不支持audio标签</audio> 

标签属性

  • autoplay:音频会尽快自动播放,不会等待整个音频下载完成
  • controls:浏览器提供包括声音、播放进度、播放暂停的控制面板(不同浏览器不一致),用户可以控制音频播放
  • loop:循环播放音频
  • muted:是否静音,默认值为false,表示有声音
  • preload:预加载,包括autometadatanone三个参数值,auto表示加载音频,metadata表示不加载音频,但是需要获取音频元数据(如音频长度),none表示不加载音频。若指定为空字符串,则等效于auto。注意autoplay属性优先级高于preload,若autoplay被指定,则会忽略此属性,浏览器将加载音频以供播放
  • src:嵌入的音频URL

设置多个音频资源

  不同浏览器支持的音频播放格式有所不同,一般为了兼容效果,会放置多种音频格式,浏览器会自上而下选择符合的音频格式。

<audio controls> <source src="music.ogg" type="audio/ogg" /> <source src="music.mp3" type="audio/mpeg" /> <source src="music.wav" type="audio/Wav" /> 当前浏览器不支持audio标签 </audio> 

元素属性

只读

  • duration:双进度浮点数,音频的播放时长,以秒为单位。若音频不可用或者音频未加载,则返回NaN
  • paused:若音频被暂停或者未开始播放,则返回true
  • ended:音频是否播放完毕,播放完毕则返回true
  • error:发生错误情况下的MediaError对象
  • currentSrc:返回正在播放或加载的音频的URL地址,对应于浏览器在source元素中选择的文件
  • seeking:用户是否在音频中移动或者跳跃到新的播放点
<audio preload="auto" src="music.mp3" onseeking="fn()" controls /> <script> var audio = document.querySelector('audio') function fn() { 
    console.log(audio.seeking) } </script> 

可读写

  • autoplay:设置音频自动播放,或者查询音频是否设置autoplay
  • loop:设置或者查询音频是否循环播放
  • currentTime:返回音频当前的播放时间点,双精度浮点数,单位为秒。音频未播放,可用于设置音频开始播放的时间点。音频播放过程中,可用于设置音频播放时间点
  • controls:显示或隐藏音频控制面板,或者查询控制面板是否可见
  • volume:返回音量值,介于0-1之间的双进度浮点数,或者设置音量值
  • muted:设置或者查询是否静音
  • playbackRate:设置或者查询音频的播放速度,1表示正常速度,大于1表示快进,0-1之间表示慢进,0表示暂停(控制面板仍然是播放,仅仅是速度为0

特殊属性

played

  表示用户已经播放的音频范围,返回 TimeRanges 对象,其中TimeRanges对象包括一个length属性和start()end()两个方法。

  • length:获取音频范围的数量,未开始播放为0,开始播放后至少为1
  • start(index):获取某个音频范围的开始位置
  • end(index):获取某个音频范围的结束位置

  若用户在音频中移动或者跳跃播放点,则会获得多个音频范围。

  如下为一段音频,用户跳跃了播放点两次,因此played.length3,其中三段音频范围分别为开始播放、第一个跳跃点、第二个跳跃点的播放范围。

在这里插入图片描述

  上述部分代码如下。

<audio src="music.mp3" controls></audio> <button id="btn">console.log</button> <script> var btn = document.querySelector('#btn') var audio = document.querySelector('audio') btn.addEventListener('click', () => { 
    const length = audio.played.length console.log(`length: ${ 
     length}`) for (var i = 0; i < length; i++) { 
    var start = audio.played.start(i) var end = audio.played.end(i) console.log(`index: ${ 
     i}, start: ${ 
     start}, end: ${ 
     end}, durations: ${ 
     end - start}s`) } }) </script> 

buffered

  表示浏览器已经缓存的音频范围,返回TimeRanges对象,若音频已完全加载则buffered.length1buffered.start(0)0buffered.end(0)为音频时长,详细参考。

seekable

  表示用户可跳转或移动的音频范围,返回TimeRanges对象,若音频已完全加载则seekable.length1seekable.start(0)0seekable.end(0)为音频时长。音频未加载或者加载错误,则seakable.length0,对应的start(0)end(0)也就不存在,详细参考。

networkState

  获取音频的网络范围,详细参考。

  • 0NETWORK_EMPTY,音频尚未初始化
  • 1NETWORK_IDLE,浏览器已选择好采用什么编码格式来播放媒体,但尚未建立网络连接
  • 2NETWORK_LOADING,浏览器正在加载
  • 3NETWORK_NO_SOURCE,未找到音频资源

error

  通常正常加载音频,则返回null,若加载过程中发生错误,浏览器将会返回MediaError对象。MediaError对象包括codemessage属性,message为错误描述信息,code为如下错误码。

  • 1MEDIA_ERR_ABORTED,音频加载加载过程中由于用户操作而被终止
  • 2MEDIA_ERR_NETWORK,确认音频资源可用,但是加载时出现网路错误,音频加载被终止
  • 3MEDIA_ERR_DECODE,确认音频资源可用,但是解码发生错误
  • 4MEDIA_ERR_SRC_NOT_SUPPORTED,音频格式不被支持或者资源不可用

方法

play

  播放音频,返回Promise,播放成功时为resolved,因为任何原因播放失败为rejected,详细参考。

var audio = document.querySelector('audio') audio .play() .then(() => { 
    }) .catch(() => { 
    }) 

pause

  暂停音频,无返回值,详细参考。

var audio = document.querySelector('audio') audio.pause() 

load

  重新加载src指定的资源,详细参考。

var audio = document.querySelector('audio') audio.src = 'music.mp3' audio.load() 

事件

常用事件

  • loadstart:开始载入音频时触发
  • durationchange:duration属性更新时触发
  • loadedmetadata:音频元数据加载完成时触发
  • loadeddata:音频的第一帧加载完成时触发,此时整个音频还未加载完
  • progress:音频正在加载时触发
  • canplay:浏览器能够开始播放音频时触发
  • canplaythrough:浏览器预计在不停下来进行缓冲的情况下,能够持续播放指定的音频时会触发

其他事件

  • abort:音频终止时触发,非错误导致
  • emptied:音频加载后又被清空,如加载后又调用 load 重新加载
  • ended:播放结束,若设置loop属性,音频播放结束后不会触发
  • error:发生错误
  • play:播放事件,第一次播放、暂停后播放会触发
  • playing:播放事件,第一次播放、暂停后播放、播放结束后循环播放会触发
  • pause:暂停事件
  • ratechange:播放速率改变
  • seeking:播放点改变开始
  • seeked:播放点改变结束
  • stalled:浏览器尝试获取音频,但是音频不可用时触发
  • suspend:音频加载暂停时触发
  • timeupdate:音频currentTime改变时触发
  • volumechange:音量改变时触发,包括静音
  • waiting:开始播放前缓冲下一帧时触发

? 写在最后

?伙伴们,如果你已经看到了这里,觉得这篇文章有帮助到你的话不妨点赞?或 Star ✨支持一下哦!

手动码字,如有错误,欢迎在评论区指正?~

你的支持就是我更新的最大动力?~

GitHub / Gitee、GitHub Pages、掘金、CSDN 同步更新,欢迎关注?~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218577.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:55
下一篇 2026年3月17日 下午11:56


相关推荐

  • c语言病毒源码讲解,【病毒】震荡波病毒C语言源码「建议收藏」

    该楼层疑似违规已被系统折叠隐藏此楼查看此楼/*#include#include#include#include#include#defineNORM”\033[00;00m”#defineGREEN”\033[01;32m”#defineYELL”\033[01;33m”#defineRED”\033[01;31m”#defineBANNERGREEN”…

    2022年4月14日
    40
  • qt显示视频的控件_qt 控件

    qt显示视频的控件_qt 控件一、前言在平时的写作过程中,经常需要将一些操作动作和效果图截图成gif格式,使得涵盖的信息更全面更生动,有时候可以将整个操作过程和运行效果录制成MP4,但是文件体积比较大,而且很多网站不便于上传,基本上都支持gif动图,一般一个5秒左右的gif,800*600分辨率,可以很好的控制在500KB内,这样就比较完美的支持各大网站上传动图。最开始使用的是ScreenGif.exe,用了很久…

    2026年1月31日
    15
  • string类型保留两位小数_js保留4位小数

    string类型保留两位小数_js保留4位小数以下我们将为大家介绍JavaScript保留两位小数的实现方法:四舍五入以下处理结果会四舍五入:varnum=2.446242342;num=num.toFixed(2);//输出结果为2.45不四舍五入以下处理结果不会四舍五入:第一种,先把小数边整数:Math.floor(15.7784514000*100)/100//输出结果为15.77第二种,当作字符串,使用正则匹…

    2022年8月10日
    8
  • mysql乐观锁使用

    mysql乐观锁使用mysql 乐观锁使用一次关于乐观锁的使用记录 仅供参考反例 缺陷 本质上根据 id 更新 版本锁字段 version 字段没有起效没有加事务回滚正例 dao 方法 sql 写法乐观锁扩展

    2026年3月26日
    2
  • JDK1.7和JDK1.8中HashMap为什么是线程不安全的?

    JDK1.7和JDK1.8中HashMap为什么是线程不安全的?前言只要是对于集合有一定了解的一定都知道 HashMap 是线程不安全的 我们应该使用 ConcurrentHa 但是为什么 HashMap 是线程不安全的呢 之前面试的时候也遇到到这样的问题 但是当时只停留在 知道是 的层面上 并没有深入理解 为什么是 于是今天重温一个 HashMap 线程不安全的这个问题 首先需要强调一点 HashMap 的线程不安全体现在会造成死循环 数据丢

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号