使用jquery和HTML5音频标签切换音频源

Dan*_*ter 27 audio jquery html5 html5-audio

我只找到了另一个解决方案,但它不完整,所以我需要帮助.

我有音频设置:

<audio id="player" controls="controls">
          <source id="ogg_src" src="lib/audio/barger01.ogg" type="audio/ogg" />
          <source id="mp3_src" src="lib/audio/barger01.mp3" type="audio/mp3" />
          Your browser does not support the audio element.
    </audio>
Run Code Online (Sandbox Code Playgroud)

我有一个动态生成的链接表来更改轨道:

<div id="audio_list">
   <a href="#" class="track" data-location="http://www.newoggtrack.ogg">sample</a>
</div>
Run Code Online (Sandbox Code Playgroud)

我有这个jquery,我不知道如何改变轨道

$('.track').click(function(){

    load_track = $(this).attr('data-location');//gets me the url of the new track

    change_track(load_track);// function to change the track of the loaded audio player without page refresh preferred...

});
Run Code Online (Sandbox Code Playgroud)

我找到了这个功能,但我没有以正确的方式使用它

 function change_track(sourceUrl) {

        audio.empty();
        $("#ogg_src").attr("src", sourceUrl).appendTo(audio);
        /****************/
        audio[0].pause();
        audio[0].load();//suspends and restores all audio element
        /****************/
    }

audio = $("<audio>").attr("id", "player")
                        .attr("preload", "auto");
Run Code Online (Sandbox Code Playgroud)

Jus*_*lin 75

你的改变功能应该是这样的:

function change(sourceUrl) {
    var audio = $("#player");      
    $("#ogg_src").attr("src", sourceUrl);
    /****************/
    audio[0].pause();
    audio[0].load();//suspends and restores all audio element

    //audio[0].play(); changed based on Sprachprofi's comment below
    audio[0].oncanplaythrough = audio[0].play();
    /****************/
}
Run Code Online (Sandbox Code Playgroud)

问题是audio.empty()和audio var.您试图附加一个清空的音频标签,并没有将音频标签写回浏览器.

  • 请注意,我遇到了这段代码的问题,因为调用play()时音频通常尚未完全加载,然后它会忽略play()指令.所以我改为音频[0] .oncanplaythrough = audio [0] .play(). (5认同)

Jay*_*ard 6

您可能还想重命名该函数,因为'change'已经是jQuery Universe中的一个函数.