Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用jquery和html5音频播放歌曲列表

使用jquery和html5音频播放歌曲列表
EN

Stack Overflow用户
提问于 2017-03-03 11:30:26
回答 1查看 2.6K关注 0票数 1

我试图让html5音频播放器播放列表的歌曲,但它只播放两个头一个,并停止。

我用这个让它在结束后播放下一首歌:

代码语言:javascript
运行
AI代码解释
复制
$(audio).on("ended", function() {
audio.pause();
var next = $('#playlist li.active').next();
if (next.length == 0) {
    next = $('#playlist li:first-child');
}
initAudio(next);
audio.play();
showDuration();
});

找不出这里的问题是什么。

编辑

整个代码:

JS

代码语言:javascript
运行
AI代码解释
复制
var audio;

$('#pause').hide();

initAudio($('#playlist li:first-child'));

function initAudio(element){
var song = element.attr('song');
var title = element.attr('songtitle');
var artist = element.attr('artist');

audio = new Audio('audio/' + song);

if(!audio.currentTime){
    $('#duration').html('0:00');
}

$('#audio-player .title').text(title);
$('#audio-player .artist').text(artist);

$('#playlist li').removeClass('active');
element.addClass('active');
}

$('#play').click(function(){
audio.play();
$('#play').hide();
$('#pause').show();
showDuration();
});

$('#pause').click(function(){
audio.pause();
$('#pause').hide();
$('#play').show();
});

$(audio).on("ended", function() {
audio.pause();
var next = $('#playlist li.active').next();
if (next.length == 0) {
    next = $('#playlist li:first-child');
}
initAudio(next);
audio.play();
showDuration();
});

HTML

代码语言:javascript
运行
AI代码解释
复制
<div id="audio-player">
    <button id="play"></button>
    <button id="pause"></button>
    <ul id="playlist">
        <li song="song1.wav" songtitle="Song1" artist="Artist1"></li>
        <li song="song2.wav" songtitle="Song2" artist="Artist2"></li>
        <li song="song3.wav" songtitle="Song3" artist="Artist3"></li>
        <li song="song4.wav" songtitle="Song4" artist="Artist4"></li>
    </ul>
    <div id="audio-info">
    <span class="artist"></span>&nbsp;&nbsp;<span class="title"></span>
    </div>
</div>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-03 11:58:28

移动此代码:

代码语言:javascript
运行
AI代码解释
复制
$(audio).on("ended", function() {
audio.pause();
var next = $('#playlist li.active').next();
if (next.length == 0) {
    next = $('#playlist li:first-child');
}
initAudio(next);
audio.play();
showDuration();
});

initAudio函数中,如下所示:

代码语言:javascript
运行
AI代码解释
复制
function initAudio(element){
    var song = element.attr('song');
    var title = element.attr('songtitle');
    var artist = element.attr('artist');

    audio = new Audio('audio/' + song);

    if(!audio.currentTime){
        $('#duration').html('0:00');
    }

    $('#audio-player .title').text(title);
    $('#audio-player .artist').text(artist);

    $('#playlist li').removeClass('active');
    element.addClass('active');

    $(audio).on("ended", function() {
        audio.pause();
        var next = $('#playlist li.active').next();
        if (next.length == 0) {
            next = $('#playlist li:first-child');
        }
        initAudio(next);
        audio.play();
        showDuration();
    });
}

这将确保对所有audio元素(而不仅仅是第一个元素)触发audio调用。

目前,ended事件只触发一次。所以,代码播放第一首歌,触发ended事件,播放第二首,然后不再触发ended

这是因为$(audio)指的是在执行initAudio时被销毁和重新创建的音频元素。这句话:

代码语言:javascript
运行
AI代码解释
复制
audio = new Audio('audio/' + song);

在调用audio时创建一个新的initAudio元素。这个新的audio元素将而不是与其附加相同的回调。

$(audio).on("ended", ...);只附加一次,如果代码创建相同类型的新元素,则不会重新附加到它们。因此,每次重新创建音频元素时,都需要重新附加事件回调,这可以在initAudio中完成。如果使用选择器,一种常见的方法是为此使用$(document).on("ended", selector, ...);,但是在您的示例中它不能工作,因为audio不是选择器。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42586969

复制
相关文章
Excel技巧:使用上方单元格的值填充空单元格
有时候,工作表列中有许多空单元格,而不是在每行都重复相同的内容,这样可以使报表更容易阅读,然而也会导致一些问题,例如不方便排序或筛选数据。
fanjy
2022/04/13
3.4K0
Excel技巧:使用上方单元格的值填充空单元格
PopupWindow显示在某个控件上方
PopupWindow有一个显示在在某个上方的方法,但是没有定义一个在控件下方的方法,不知为何.这里提供一个小思路:
夏洛克的猫
2018/10/18
3.8K0
IOS 自定义UITableView单元格的高
1 import UIKit 2 3 class ViewController:UIViewController, UITableViewDataSource, UITableViewDelegate { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 9 let scr
用户5760343
2019/07/08
5650
IOS 自定义UITableView单元格的高
UITableView在Flutter中是什么?
前面我们学习了文本、图片和按钮这些基本元素,这些基本元素需要进行排列组合,才能构成我们看到的UI视图。那么,当这些基本元素的排列布局超过屏幕显示尺寸(即超过一屏)时,我们就需要引入列表控件来展示视图的完整内容,并根据元素的多少进行自适应滚动展示。
拉维
2019/08/12
5.7K0
UITableView在Flutter中是什么?
iOS自定义UICollectionView和UITableView单元格选中样式
iOS中,UICollectionView和UITableView已经有系统默认选中颜色设置,但是只有无色,蓝色,灰色,三种颜色设置,如果想要其他的颜色效果,我们可以自由自定义设置。 前言 先观赏
陈满iOS
2018/09/10
3.1K0
iOS自定义UICollectionView和UITableView单元格选中样式
iOS 设置tableViewCell的高度
iOS tableView的cell在显示之前必须获取cell的高度,如果cell的高度都一样,统一设置就行了,但是cell的高度不统一的话就要一一设置了,在ios8之前,需要自己手动去计算,iOS之后就方便多了
码客说
2019/10/22
2.4K0
【死磕iOS】处理不等高TableViewCell的小花招
地址://www.jianshu.com/p/a0342ee86431 嗨大家,好久不见~ 今天来和大家一起聊聊处理不等高TableViewCell的那些小花招~ ummmm…其实我是个标题党~ ??
春哥大魔王
2018/04/16
1.3K0
【死磕iOS】处理不等高TableViewCell的小花招
【IOS开发基础系列】UICollectionView专题
        UICollectionView是一种新的数据展示方式,简单来说可以把他理解成多列的UITableView(请一定注意这是UICollectionView的最最简单的形式)。
江中散人_Jun
2023/10/16
9920
【IOS开发基础系列】UICollectionView专题
html一个汉字空格占位_html空格字符
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
2.4K0
iOS小经验:UITableView&UICollectionView设置单元格的默认选中状态
一个表格视图(或者宫格视图)中,当一个单元格被选中时设置彩色样式,选中其它单元格时设置灰色样式。
陈满iOS
2018/10/09
3.7K0
html一个汉字空格占位_空格占位符复制
em是字体排印学的计量单位,相当于当前指定的点数。例如,1 em在16px的字体中就是16px。
全栈程序员站长
2022/09/27
2.1K0
iOS适配
首先,需要在Info.plist配置文件中,增加键:UIViewControllerBasedStatusBarAppearance,并设置为YES;
码客说
2019/10/22
9730
css 一个汉字空格
全角空格被解释为汉字,所以不会被被解释为HTML分隔符,可以按照实际的空格数显示。
week
2018/08/24
6560
css 一个汉字空格
PHP去除多余空格 多个连续空格只保留一个
/** 多个连续空格只保留一个 * @param string $string 待转换的字符串 @return unknown */ static public function merge_spa
大师级码师
2021/10/29
2.7K0
iOS中让cell分割线顶头的四种终极方法实现:从小白到装x1 iOS8以前2 iOS8以后三种方法
iOS中让cell分割线顶头在可认知的范围内,一共有四种办法。但是度娘一抄一大把,往往给出的方法都是舍近求远。很多小白也是两眼一闭,拿来就复制粘贴。 以后不要再求人了,也不用在度娘了。记住下面的方法,足够应对各种场景了。 1 iOS8以前 iOS8以前需要在controller中以下两个方法中进行约束。 - (void)viewDidLoad { [super viewDidLoad]; self.tableView.separatorInset = UIEdgeInsetsZero; self.table
stanbai
2018/06/28
6670
一个空格引发的血案
系统运维从来就是一个精细化的工作,除了规则与规范的约束之外,运维人员的严谨、谨慎也必不可少,有时候一个简单的错误就会导致一场灾难,小到一个字符,一个空格。 本文的案例就是因为一个空格导致的,Oracle RAC遭遇故障重启。 故障现象:客户10.2.0.4 RAC for Solaris 10环境突然出现了实例重启。 故障过程:数据库正常运行到下午3点左右,随后两个节点分别重启,其中一个节点上的实例无法自动启动。检查两个实例的告警日志发现,在节点重启前,两个节点都出现了明显的ORA-27504错误。 错误信
数据和云
2018/03/05
9891
报表有合并单元格,如何排序?
很多情况下,公司业务报表有合并单元格,例如下表。我们无法直接进行下一步动作,比方我们想看看销售业绩排名,对销售额进行排序,此表无法直接实现。
wujunmin
2021/09/07
1.4K0
报表有合并单元格,如何排序?
[前端]一个空格引发的血案
是用flex布局,中间是grow等于1,内容是铺满整个container的 但是却出现了这种情况
Tuzei
2020/03/16
5360
教你写个多表视图
如图所示的多表视图是一个很常用的东西,之前我是用UIScrollView和UITableViewController做的。把当前的控制器作为一个父控制器,添加三个UITableViewController的实例作为子控制器,把父控制器中的 scrollView 作为容器,然后添加子控制器中的 tableView 作为子视图。这样做有一个问题,一旦有十几二十个表的话,内存就要爆炸了。解决的办法是可以自己写个重用机制,不过这显然没必要,用自带重用机制的UICollectionView应该是个更好的选择。
Sheepy
2018/09/10
1.3K0
教你写个多表视图
点击加载更多

相似问题

UWP中的定制MarkupExtension

11

Silverlight MarkupExtension

10

IValueConverter与MarkupExtension

23

X: Silverlight中的共享MarkupExtension

10

.Net城域应用中的MarkUpExtension

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档