H5 Audio 音频属性精简版

418 阅读5分钟

demo完整代码,可在本项目上进行测试,或者提取组件到自己的项目中。

autoplay

我们可以通过js设置元素 autoplay 属性来设置是否自动播放,或者直接在标签上添加 autoplay 属性。

<audio src="audioSrc" autoplay></audio>
// 启用自动播放
document.querySelector('audio').autoplay = true
// 禁止自动播放
document.querySelector('audio').autoplay = false

返回是否在加载完成之后随即播放音频。

console.log(document.querySelector('audio').autoplay) // true or false

buffered

此属性返回一个 TimeRanges 对象,这个对象表示用户音频缓冲范围(缓冲范围指的是已缓冲音频的时间范围。如果用户在音频中跳跃播放,会得到多个缓冲范围)。

TimeRanges 对象,包含一个 length 属性,表示总共有几个缓冲范围。

我们第一次点击某个链接播放音频的时候,会缓冲一次,可以看到缓冲进度条。此时访问 buffered 属性可以看到 lenghth 为1。

注意: 当我们设置了 preloadnone时是不会进行缓冲的。

console.log(document.querySelector('audio').buffered) // {length: 1}

如果音频时间过长不会一次性缓冲完,当我们点击没有缓冲的地方进行播放,则会开始第二次缓冲,此时的 buffered.length 为2。

console.log(document.querySelector('audio').buffered) // {length: 2}

我们可以访问 TimeRanges 对象原型上的 startend 方法,这两个方法需要传递参数。参数为第几个缓冲范围,第一次缓冲为0。

// 假设此时的 buffered.length = 2
const TimeRanges = document.querySelector('audio').buffered
console.log(`第一段缓冲范围是:${TimeRanges.start(0)}-${TimeRanges.end(0)}`)
// 第一段缓冲范围是:0-202.959
console.log(`第二段缓冲范围是:${TimeRanges.start(1)}-${TimeRanges.end(1)}`)
// 第二段缓冲范围是:231.394-254.152

controls

我们可以通过js设置元素 controls 属性来设置是否显示标准的音频控件,或者直接在标签上添加 controls 属性。

<audio src="audioSrc" controls></audio>
// 启用控件
document.querySelector('audio').controls = true
// 禁用控件
document.querySelector('audio').controls = false

返回是否显示标准的音频控件。

console.log(document.querySelector('audio').controls) // true or false

currentSrc

返回当前音频的 URL。如果未设置则返回空字符串。

console.log(document.querySelector('audio').currentSrc)

currentTime

设置音频播放位置(传入秒),设置之后会跳转到指定位置。

如果 audio 标签 src 属性为空,设置 currentTime 可以看到控件上的时间发生变化,例如我们修改 currentTime 为 120秒,控件时间显示为 2:00 / 0:00。此时指定音频路径后,音频也跳转到两分钟的位置如果音频时长为五分钟,那么此时控件上我们看到就是 2:00 / 5:00 这样 。

设置的 currentTime 并不会修改当前播放状态,如果处于未播放状态,修改 currentTime 后会跳转到指定位置,但不会进行播放。如果处于播放状态修改之后会跳转到指定位置后继续播放。

如果设置的时间超过音频时长则会直接跳转至结束位置。

// 跳转到 1分20秒
document.querySelector('audio').currentTime = 80

访问 audio 标签的 currentTime 属性可以获取当前播放位置,返回一个浮点数

console.log(document.querySelector('audio').currentTime) // 42.090776

有些时候我们需要一直获取当前播放位置,手动获取 currentTime 当然不是理想操作,在事件篇里我们将介绍 timeupdate 方法,这个方法会在 currentTime 改变的时候就通知你并将当前的 currentTime 也返回给你。

duration

返回当前音频的长度(秒数)。

如果未设置音频,则返回 NaN。如果媒体数据可用但长度未知,则此值为NaN。 如果媒体流式传输且没有预定义长度,则值为Inf。

document.querySelector('audio').duration // 257.645714

ended

用于检查音频播放是否结束。

console.log(document.querySelector('audio').ended) // true or false

loop

设置或返回音频是否应该在结束时重新播放当前音频。可以通过标签属性直接设置,也可以通过js设置。

<audio src="audioSrc" loop></audio>
document.querySelector('audio').loop = true
console.log(document.querySelector('audio').loop) // true

muted

设置或返回音频是否应该被静音(关闭声音)。可以通过标签属性或者直接通过js进行操作。

<audio src="audioSrc" muted></audio>
document.querySelector('audio').muted = false
console.log(document.querySelector('audio').muted) // false

paused

返回音频是否已暂停。

console.log(document.querySelector('audio').paused) // true or false

playbackRate

设置或返回音频/视频的当前播放速度。播放过程中设置立即生效。

document.querySelector('audio').playbackRate = 0.5
console.log(document.querySelector('audio').playbackRate) // 0.5

属性值与 defaultPlaybackRate 相同。

preload

设置或返回是否在页面加载后立即加载音频。可以设置标签属性或者通过js来设置。

<audio src="audioSrc" preload="auto"></audio>
document.querySelector('audio').preload = 'auto' 
console.log(document.querySelector('audio').preload)

属性值

  • auto:一旦页面加载,则开始加载音频。实际效果为一旦为 audio 指定 src就获取音频数据可以看到控件已经有了时长显示,并且可以看到缓冲条已经加载。
  • metadata: 当页面加载后仅加载音频的元数据。只能看到控件上时长变化,并不会缓冲。
  • none:页面加载后不应加载音频。控件上时间也不会变化还是00:00,并且也不会进行缓冲,只有当点击播放按钮之后,才会显示时长并且进行缓冲。

个人感觉设置成metadata比较好,让用户知道已经切换了音频,并且不会缓冲也不消耗流量。

src

设置或返回音频/视频的当前来源。直接通过设置标签属性或者通过js来指定。

<audio src="audioSrc"></audio>
document.querySelector('audio').src = 'audioSrc'
console.log(document.querySelector('audio').src)

属性值

  • 绝对 URL - 指向另一个网站(比如 src="www.example.com/test.mp3")
  • 相对 URL - 指向网站内的一个文件(比如 src="test.mp3")

volume

设置或返回音频的当前音量。

document.querySelector('audio').volume = 0.2
console.log(document.querySelector('audio').volume)

属性值为 0.0 与 1.0 之间的数字。