猿问

JS无法获取正在播放的audio的src等属性 / audio的duration为NaN

打算设计一个播放器,其中一个函数控制点击菜单某首歌曲即可播放,在该函数内调用music.play()后继续console.log(music.src)是可以正常显示src路径的。

然而在另一个控制播放下一曲的函数中,不论输出src还是currentSrc都是显示未定义,甚至输出currentTime等相关属性都是显示为0.相关代码如下:

function prevSong(msc){    //上一首歌
        let s = msc.currentSrc;        let tar;        /*
           返回当前播放的节点给tar,代码略
        */
        msc.pause();        if(tar.previousSibling.nodeName == 'LI'){            let index = tar.previousSibling.innerHTML;
            msc.src = 'src/music/'+index+'.mp3';
        }else{            let chd = tar.parentNode.childNodes;            let res = chd[chd.length-1];
            msc.src = 'src/music/'+res.innerHTML+'.mp3'
        }        //msc.load();
        msc.play();
    }

另外,如何正常获取音频长度duration?我照着网上各种解决方法,使用了onloadedmetadata甚至是promise,输出的都是NaN

直接把demo给post上来吧:http://www.malakh.xyz/demo2/
js:http://www.malakh.xyz/demo2/s...


慕丝7291255
浏览 2548回答 1
1回答

幕布斯6054654

需要这样获取audio才行:var player = $("#msc")[0];如果直接获取$("#msc"),使用play属性确实可以直接播放,但是无法给这个audio设置src属性以及获取音频时常。获取音频时常:var duration = player.duration如果你是动态获取的播放地址,在第一次加载音频的时候,可能无法立即获取时常,所以你需要设置一个定时器,每10毫秒检测一次duration//当前歌曲总时长     function getTime() {         setTimeout(function () {            var duration = player.duration;            if (isNaN(duration)) {                 getTime();             }         }, 10);     }
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答