相关问题前提:
最近在做一个 已知 audio 的 url 获取 其 时长,并且push 进去数组的问题
上代码:
if (fileType === 'audio') {
let audioDom = new Audio(url)
let _this = this
audioDom.addEventListener('loadedmetadata', function (_event) {
embeddedData.audio = {
id: fileUrl,
Extension: fileType.toUpperCase(),
fileExtension: fileType.toUpperCase(),
// 获取音频的长度
duration: Math.round(audioDom.duration)
}
fileInfo.audioTime = Math.round(audioDom.duration)
_this.embeddedFiles.push(embeddedData)
_this.$emit('uploadSuccess', fileInfo)
})
} else {
fileType === 'image' ? this.embeddedImages.push(embeddedData) : this.embeddedFiles.push(embeddedData)
this.$emit('uploadSuccess', fileInfo)
}
记录一下:
1、首先要常见一个 audio dom
2、然后 用 addEventListener('loadedmetadata', function(){})
,这个事件是说 等 这个audio 都加载完成了以后 ,就可以获取到 audio的 相关 参数,比如说 duration值
3、这一点需要注意:在 这个事件里面,数据是拿不出来的,所以 ,我就用 原本的一个全局的 数据push 进去了,但是用的是 this.embeddedFiles.push(embeddedData)
,但是 报错表示 this.embeddedFiles
不存在,是由于作用域的问题,所以要 先 let _this = this
,再用 _this.embeddedFiles.push(embeddedData)
就可以了
ok ,仅此记录
网友评论