微信 audio 获取 duration 为 NaN 的解决方法

先加load()

myaudio.load();

myaudio.oncanplay = function () {
    alert(myaudio.duration);
}

load() 方法用于在更改来源或其他设置后对音频/视频元素进行更新

 

duration 的值可以在 canplay 事件发生之前的 durationchange 阶段中获取。

 

myaudio.onduratiοnchange= function () {
    alert(myaudio.duration);
}

 

如果在Vue中:

<template>
  <audio id="audioPlay" :src="isPlay" @canplay="playing()" @οnended="ended()" v-el:audio></audio>
</template>

<script>

export default {
    computed: {
        isPlay() {
            return this.$store.state.audioSrc;
        }
    },
    methods: {
        playing() {
            console.log('audio paly');
       },
        ended() {
            console.log('audio end');
        }
    },
}
</script>

 

也可以试试下面这种方法

var load = (musicSrc) => new Promise(resolve => {
    let audio       = new Audio()
    audio.src       = musicSrc
    audio.addEventListener('canplay', resolve);
})

 

当音频/视频处于加载过程中时,会依次发生以下事件:

loadstart
durationchange
loadedmetadata
loadeddata
progress
canplay
canplaythrough

 

 

ios微信下vue项目组件切换并自动播放音频的解决方案

 

npm包:audio-loader了解下(最后我在微信中遇到的IOS获取不到duration,就是直接通过audio-loader包解决的。)

var load = require('audio-loader')
 
// load one file
load('http://example.net/audio/file.mp3').then(function (buffer) {
  console.log(buffer) // => <AudioBuffer>
})
import load from 'audio-loader'

load(this.music).then((function (buffer) {
   _self.$refs.totalTime.textContent = _self.formatTime(buffer.duration)
}))

 

转载于:https://www.cnblogs.com/RuMengkai/p/9923680.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值