【问题标题】:HTML5 Audio Tag Changing Src when finished. jQuery完成后 HTML5 音频标签更改 Src。 jQuery
【发布时间】:2013-07-16 23:32:41
【问题描述】:

我创建了一个带有 ul 的音频元素。在 ul 中是链接到不同歌曲的列表项。单击该项目时,我已经更改了歌曲,并且一切正常,但是我希望在当前播放的歌曲结束时歌曲也可以更改。下面是我的html和js。

HTML:

<div id="mp3_player">
    <div id="audio_box">
        <audio id="audioPlayer" preload="auto" src="" controls="controls"></audio>
    </div>
</div>

<ul id="songSelector">
    <a href="song1.mp3"><li>song1</li></a>
    <a href="song2.mp3"><li>song2</li></a>
    <a href="song3.mp3"><li>song3</li></a>
    <a href="song4.mp3"><li>song4</li></a>
</ul>

源没有值,因为它被添加到我的脚本的另一部分。

JS:

$(audio).bind('ended', function() {
    var testing = $('#songSelector').next().attr('href');
    alert(testing);
})

当歌曲结束时,警报返回未定义,它应该在下一个 li 元素上返回链接。我就是想不通我做错了什么。

提前致谢。

【问题讨论】:

  • 您知道您的 HTML 无效,对吗?你不能将LI 包裹在A
  • @Roko C. Buljan 是的,我知道这只是为了让我的生活更轻松一些,但我正在更改它,以便没有 A 标签。

标签: javascript jquery html audio element


【解决方案1】:

现在,$('#songSelector').next() 将转到 dom 中 #songSelector 之后的任何内容。您可能需要在另一个变量中跟踪哪个是“当前”的。

var currentSong = $('#songSelector').find('a:first');
$(audio).bind('ended', function() {
    var next = currentSong.next();
    if ( next.length ) {
        currentSong = next;
    } else {
        /* uncomment this if you want it to loop back to the beginning */ 
        // currentSong = $('#songSelector').find('a:first');
    }
    var testing = currentSong.attr('href');
    alert(testing);
});

那么你只需要在你的click处理程序中更新currentSong

【讨论】:

  • 抱歉所有问题,但我是 js 新手 :)。有没有一种方法可以向 currentSong 元素添加一个“活动”类,以便用户知道歌曲已更改为什么。单击和更改歌曲时我可以正常工作,但是当它自动更改时我无法正常工作。再次抱歉:)
  • 没问题。由于 jQuery 的链接,您可以这样做:var testing = currentSong.addClass('active').attr('href'); 和开头部分 var next = currentSong.removeClass('active').next(); 希望这至少能让您走上正轨。
  • 我刚刚注意到它在第一首和第二首歌曲之间起作用,但是它只是重复列表中的第一首歌曲。上面的答案似乎也不起作用。我必须将程序重写为 jquery,因为目前它是 jquery 和 raw js 所以:(感谢你的帮助,我会看看我是怎么做的 :)
猜你喜欢
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多