Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >jQuery -$(.on).on(‘ended’function())仅在第一个元素上触发一次

jQuery -$(.on).on(‘ended’function())仅在第一个元素上触发一次
EN

Stack Overflow用户
提问于 2017-02-14 05:50:28
回答 1查看 4.3K关注 0票数 2

我刚刚开始使用jQuery,并按照教程构建了一个音频播放器。

我想要我的音频,每次一首歌结束,自动转到下一首歌并播放它。

我在这里检查了一个答案,它完全遵循了我所做的教程,但是答案没有解决问题。

我已将非工作函数标记为“已损坏”

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

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

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

function initAudio(element){
    var song = element.attr('song');
    var artist = element.attr('artist');
    
    // Create Audio Object
    audio = new Audio('music/'+ song + '.mp3');
    
    // If no song loaded, show 0:00
    if(!audio.currentTime){
        $('#duration').html('0:00');
    }
    // otherwise get duration and show
    showDuration();
    
    // Get artist and song title
    $('#audio-player .audio-title').text('- ' + song);
    $('#audio-player .audio-artist').text(artist);
    
    $('#playlist li').removeClass('active-audio');
    element.addClass('active-audio');
}

// click playlist song
$('#playlist li').click(function(){
  audio.pause();
  initAudio($(this));
  audio.play();
  showDuration();
  $('#play').hide();
  $('#pause').show();
});

// play button
$('#play').click(function (){
    audio.play();
    $('#play').hide();
    $('#pause').show();
    $('#duration').fadeIn(400);
    showDuration();
});
// pause button
$('#pause').click(function (){
    audio.pause();
    $('#pause').hide();
    $('#play').show();
    $('#duration').fadeIn(400);
    showDuration();
});

// Next button
$('#next').click(function(){
    audio.pause();
    var next = $('#playlist li.active-audio').next();
    if(next.length == 0){
        next = $('#playlist li:first-child');
    }
    initAudio(next);
    audio.play();
    showDuration();
    if($('#play').is(':visible')){
        $('#play').hide();
        $('#pause').show();
    }
});

// Prev button
$('#prev').click(function(){
    audio.pause();
    var prev = $('#playlist li.active-audio').prev();
    if(prev.length == 0){
        prev = $('#playlist li:last-child');
    }
    initAudio(prev);
    audio.play();
    showDuration();
    if($('#play').is(':visible')){
        $('#play').hide();
        $('#pause').show();
    }
});

// Volume Control
$('#volume').change(function(){
    audio.volume = parseFloat(this.value / 100);
});

// Time Duration
function showDuration(){
    $(audio).on('timeupdate', function(){
        //get hours $ mins
        var s = parseInt(audio.currentTime % 60);
        var m = parseInt((audio.currentTime)/60) %60;
        // Add 0 if < 10
        if(s < 10){
            s = '0'+s;
        }
        $('#duration').html(m + ':' + s);
        var value = 0;
        if(audio.currentTime > 0){
            value = ((100 / audio.duration) * audio.currentTime);
        }
        $('#progress').css('width',value+'%');
        });
}

// if song ended, go to next ==== BROKEN
$(audio).on('ended', function(){
    $('#next').trigger('click');
});

// click progress bar
$("#progressbar").mousedown(function(e){
    var leftOffset = e.pageX - $(this).offset().left;
    var songPercents = leftOffset / $('#progressbar').width();
 audio.currentTime = songPercents * audio.duration;
});

该函数应在音频结束时触发“#next”上的单击事件。next的点击事件在点击时运行良好,触发在控制台中运行良好,当监听audio.on(‘and’)时,它只会触发一次,并且只会在第一首歌上触发。

任何帮助都将不胜感激。

谢谢!

如果需要,我已经添加了html作为参考。

代码语言:javascript
运行
AI代码解释
复制
<div id="audio-container">
    
    <!-- controls -->
    <div id="audio-player">
        <span class="audio-artist"></span>
        <span class="audio-title"></span>
    </div>
    <div class="clearfix">
        <div id="audio-controls">
            <div id="play-pause">
                <button id="play"></button>
                <button id="pause"></button>
            </div>
            <div id="tracker">
                <div id="progressbar">
                    <span id="progress"></span>
                </div>
            </div>
            <div id="duration"></div>
            <div id="volume-wrapper">
            <div id="speaker-icon"></div>
            <div id="volume-div">
                <input id="volume" type="range" min="0" max="100" value="100">
            </div>
            </div>
        </div>
    </div>
    <div id="audio-buttons">
        <a id="prev">«</a>
        <a id="next">»</a>
    </div>
    <!-- end controls -->
    
    <!-- input audio tracks here -->
    <div class="clearfix">
        <ul id="playlist">
            <li song="Dystopia" artist="Tesseract">
                <div class="track-no">01.</div>
                <div class="track-name">Tesseract - Dystopia</div>
                <div class="track-len">6:53</div>
            </li>
            <li song="Messenger" artist="Tesseract">
                <div class="track-no">02.</div>
                <div class="track-name">Tesseract - Messenger</div>
                <div class="track-len">3:34</div>    
            </li>
            <li song="Tourniquet" artist="Tesseract">
                <div class="track-no">03.</div>
                <div class="track-name">Tesseract - Tourniquet</div>
                <div class="track-len">5:57</div>
            </li>
        </ul>
    </div>
    <!-- end input -->
    
</div>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-14 05:58:57

ended事件侦听器移到initAudio()函数中。这应该可以解决这个问题。

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

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

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

function initAudio(element){
    var song = element.attr('song');
    var artist = element.attr('artist');
    
    // Create Audio Object
    audio = new Audio('music/'+ song + '.mp3');
    
    // If no song loaded, show 0:00
    if(!audio.currentTime){
        $('#duration').html('0:00');
    }
    // otherwise get duration and show
    showDuration();
    
    // Get artist and song title
    $('#audio-player .audio-title').text('- ' + song);
    $('#audio-player .audio-artist').text(artist);
    
    $('#playlist li').removeClass('active-audio');
    element.addClass('active-audio');
  
  // if song ended, go to next ==== BROKEN
  $(audio).on('ended', function(){
      $('#next').trigger('click');
  });

}

// click playlist song
$('#playlist li').click(function(){
  audio.pause();
  initAudio($(this));
  audio.play();
  showDuration();
  $('#play').hide();
  $('#pause').show();
});

// play button
$('#play').click(function (){
    audio.play();
    $('#play').hide();
    $('#pause').show();
    $('#duration').fadeIn(400);
    showDuration();
});
// pause button
$('#pause').click(function (){
    audio.pause();
    $('#pause').hide();
    $('#play').show();
    $('#duration').fadeIn(400);
    showDuration();
});

// Next button
$('#next').click(function(){
    audio.pause();
    var next = $('#playlist li.active-audio').next();
    if(next.length == 0){
        next = $('#playlist li:first-child');
    }
    initAudio(next);
    audio.play();
    showDuration();
    if($('#play').is(':visible')){
        $('#play').hide();
        $('#pause').show();
    }
});

// Prev button
$('#prev').click(function(){
    audio.pause();
    var prev = $('#playlist li.active-audio').prev();
    if(prev.length == 0){
        prev = $('#playlist li:last-child');
    }
    initAudio(prev);
    audio.play();
    showDuration();
    if($('#play').is(':visible')){
        $('#play').hide();
        $('#pause').show();
    }
});

// Volume Control
$('#volume').change(function(){
    audio.volume = parseFloat(this.value / 100);
});

// Time Duration
function showDuration(){
    $(audio).on('timeupdate', function(){
        //get hours $ mins
        var s = parseInt(audio.currentTime % 60);
        var m = parseInt((audio.currentTime)/60) %60;
        // Add 0 if < 10
        if(s < 10){
            s = '0'+s;
        }
        $('#duration').html(m + ':' + s);
        var value = 0;
        if(audio.currentTime > 0){
            value = ((100 / audio.duration) * audio.currentTime);
        }
        $('#progress').css('width',value+'%');
        });
}


// click progress bar
$("#progressbar").mousedown(function(e){
    var leftOffset = e.pageX - $(this).offset().left;
    var songPercents = leftOffset / $('#progressbar').width();
 audio.currentTime = songPercents * audio.duration;
});

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

https://stackoverflow.com/questions/42218791

复制
相关文章
【Elasticsearch】RestAPI
ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。官方文档地址:Elasticsearch Clients | Elastic
陶然同学
2023/10/14
1570
【Elasticsearch】RestAPI
rm: 无法删除"/mnt/cdrom/
[root@redhatAS6 home]# mount -o loop rhel-server-6.3-x86_64-dvd.iso /mnt/cdrom
py3study
2020/01/07
2.4K0
restapi(8)- restapi-sql:用户自主的服务
学习函数式编程初衷是看到自己熟悉的oop编程语言和sql数据库在现代商业社会中前景暗淡,准备完全放弃windows技术栈转到分布式大数据技术领域的。但是在现实中理想总是不如人意,本来想在一个规模较小的公司展展拳脚,以为小公司会少点历史包袱,有利于全面技术改造。但现实是:即使是小公司,一旦有个成熟的产品,那么进行全面的技术更新基本上是不可能的了,因为公司要生存,开发人员很难新旧技术之间随时切换。除非有狂热的热情,员工怠慢甚至抵制情绪不容易解决。只能采取逐步切换方式:保留原有产品的后期维护不动,新产品开发用一些新的技术。在我们这里的情况就是:以前一堆c#、sqlserver的东西必须保留,新的功能比如大数据、ai、识别等必须用新的手段如scala、python、dart、akka、kafka、cassandra、mongodb来开发。好了,新旧两个开发平台之间的软件系统对接又变成了一个问题。
用户1150956
2019/10/30
1.5K0
Elasticsearch常用的RESTAPI
GET方式 1.0 查询Elastic节点状态 curl -v 192.168.10.1:9200/_cat/health?v 1.1 初始化索引 # 在创建索引之前 对索引进行初始化操作,指定sha
Yuou
2022/09/26
2690
Kubernetes容器netns无法删除问题
近日摸鱼,出现问题 在k8s+containerd的环境上删除容器失败,容器一直保持在terminating状态containerd日子显示”failed to check network namespace closed: remove netns:unlinkat *: device or resource busy” ,不影响新创建的容器运行。
王先森sec
2023/04/24
2.3K1
解决kafka无法删除topic问题
使用kafka命令删除某个topic之后,查看集群的topic列表时,被删除的tpoic依然存在
全栈程序员站长
2022/11/03
1.7K0
解决kafka无法删除topic问题
Docker---(9)Docker中容器无法停止无法删除
问题:mysql容器如法停止,无法删除,也无法连接。docker stop,docker kill等命令都无效。
IT云清
2019/01/22
6.5K0
Flink Metrics监控与 RestApi
Flink 的 metrics 是 Flink 公开的一个度量系统,metrics 也可以暴露给外部系统,通过在 Flink 配置文件 conf/flink-conf.yaml 配置即可,Flink原生已经支持了很多reporter,如 JMX、InfluxDB、Prometheus 等等。
kk大数据
2021/07/09
4.2K0
Flink Metrics监控与 RestApi
git无法删除本地分支_git如何删除远程分支
转载:https://blog.csdn.net/benben_2015/article/details/79782202
全栈程序员站长
2022/11/07
2.2K0
网络服务—NFS
NFS(NetWork File Sysetem, 网络文件系统)它允许网络中的计算机之间通过TCP/IP网络共享资源的分布式存储系统,通常用来存储共享视频、图片等静态数据; NFS Server允许NFS Client将远端NFS Server的共享目录挂载到本地。在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。
用户10048459
2022/09/19
1.8K0
EDB无法删除分区子表的错误
最近某个应用,连接的是EDB数据库,测试环境是EDB 9.2版本,在删除一张inherit方式创建的分区子表(例如主表a,子表b),先用alter table b no herit a删除关联,再drop删除子表,提示无法删除,从错误提示看,主表a要依赖子表b,建议删除主表a,达到删除子表b的效果。可我都删除了主子关系,为什么无法删表?
bisal
2019/02/28
1.7K0
Hue中无法删除用户异常分析
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.问题描述 ---- 在Hue中使用管理员安装了Solr的示例后,在用户管理界面无法正常删除用户,报如下异常: Processing exception: (1146, "Table 'hue.search_collection' doesn't exist"): Traceback (most recen
Fayson
2018/04/18
1.8K0
Hue中无法删除用户异常分析
k8s无法删除namespace
kubernetes 删除 namespace 但是一直处于 Terminating 状态
summerking
2022/10/27
9170
个推消息推送RestAPI版
1.权鉴获取Token /** * 个推获取权鉴Token * @return bool */ public static function getAuthToken() { require_once(__DIR__ . '/../../common/libs/requests/library/Requests.php'); \Requests::register_autoloader(); $headers
素描
2019/09/19
1.5K0
为Flask RestAPI集成Swagger UI
虽然这种事情已经做过好几遍了,但是不读文档还是没辙;我把这种半吊子形容为“我认识人民币,但是画不出来…T_T”
happy123.me
2019/12/30
2K0
Linux文件名乱码无法删除文件
2. 通过命令find . -inum xxxx -delete 删除文件
流柯
2022/03/08
14.2K0
Linux文件名乱码无法删除文件
Nodejs·网络服务
本章是从NodeJS拥有的模块角度,讲述了网络服务中的应用: net ----- > TCP dgram --> UDP http -----> HTTP https ----> HTTPS 从这四个模块的角度出发,讲述了网络在服务器中的应用。 从创建服务的服务器端和客户端角度,模拟发送和接收请求。 其中受益最大的应该是webSocket那章节,之前都没有听过这个协议,后来看了这本书,询问了下度娘,才知道: 这个协议是基于HTML5的新协议,它支持服务器端与客户端创建长连接,不需要多次进行
用户1154259
2018/01/17
6740
Nodejs·网络服务
Linux网络服务
按“G”到末行,按"O"在下一行插入:IPADD、NETMASK(子网掩码)、GETWAY
云计算小白
2019/10/09
1.8K0
delete archivelog all 无法彻底删除归档日志?
    最近在因归档日志暴增,使用delete archivelog all貌似无法清除所有的归档日志,到底是什么原因呢?
Leshami
2018/08/14
1.3K0
Docker Image 解决镜像无法删除的问题
Error response from daemon: conflict: unable to delete 4ac2d12f10cd (must be forced) - image is referenced in multiple repositories 来自守护进程的错误响应:冲突:无法删除4ac2d12f10cd(必须强制) - 映像在多个存储库中被引用 1.删除镜像 查看镜像 root@souyunku:~/mydocker# docker images REPOSITORY
程序员鹏磊
2018/02/09
4.8K1

相似问题

自动化Web测试服务器部署

13

Heroku :应用程序崩溃,部署了“surespot”web服务器

19

无服务器部署的环境变量不更新

14

在同一台服务器上部署多个web应用

61

nServicebus web服务器部署

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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