【问题标题】:how to detect end of audio file using jquery and html5如何使用 jquery 和 html5 检测音频文件的结尾
【发布时间】:2013-03-13 05:54:34
【问题描述】:

我有这个 jquery 代码和 html 可以在英语培训网站上正常工作。

$(document).ready(function() {
  $("p").hover(
    function() {
      $(this).css({"color": "purple", "font-weight" : "bolder"});
    },
    function() {
      $(this).css({"color": "black", "font-weight" : ""});
    }
  ); 
  $("p").click(function (event) {
    var element = $(this);
    var elementID = event.target.id;
    var oggVar = (elementID +".ogg");   
    var audioElement = document.createElement('audio');
    audioElement.setAttribute('src', oggVar); 
    audioElement.load();
    audioElement.addEventListener("load", function() { 
        audioElement.play(); 
    }, true);
    audioElement.play();    
  }); 
});

<div>
  <p id="one"> this is the first paragraph</p>
....   
  <p id="four"> this is the fourth paragraph</p> 
....   
</div>

问题在于,如果在播放(或双击)音频文件时单击文本,则第二个文件(或同一文件)开始播放。所以我最终会同时播放两个文件。我需要防止这种情况。我认为“结束”事件是相关的,但是,尽管查看了一些示例,但我看不出如何检测文件是否正在播放并等到它完成后再允许第二个文件开始(甚至阻止它播放完全)。任何帮助将不胜感激:)

【问题讨论】:

    标签: jquery html audio


    【解决方案1】:

    您可以为ended and playing 事件添加事件侦听器。另外,为什么要通过 javascript 创建音频标签?我只会创建一个空的隐藏音频标签:

    <audio id='myAudio' autoplay='autoplay'></audio>
    

    你有两个选择:

    • 在播放/停止音频时禁用/启用按钮/链接(恕我直言)
    • 在播放时忽略点击

    然后给它添加两个事件监听器:

    var playing = false;
    
    $('#myAudio').on('playing', function() {
       playing = true;
       // disable button/link
    });
    $('#myAudio').on('ended', function() {
       playing = false;
       // enable button/link
    });
    
    $("p").click(function (event) {
       if(!playing) {
          var element = $(this);
          var elementID = event.target.id;
          var oggVar = (elementID +".ogg");   
          var audioElement = $('#myAudio')[0];
          audioElement.setAttribute('src', oggVar); 
          audioElement.play();
       }
    
    });
    

    【讨论】:

    • 感谢您的帮助,但很抱歉我无法让这个工作。在部分 - // 加载新源 - 您是否建议在 $("p").click(function (event),,, }); 中重用现有代码等等?
    • 在您的点击功能中,您设置新的源并播放它。我稍微调整了答案。
    • 您好,很抱歉回复延迟。我尝试了您发布的最新代码,但无济于事。点击没有声音。这令人费解。我尝试在 firebug 中查看它,在 var 播放时设置一个断点,firebug 一直到下一行 - $('#myAudio').on('playing', function() 但随后进入 jquery.js。任何 cmets
    • 很奇怪。尝试在您的播放功能范围内添加警报。其他选项在 audioElement.play() 之后设置为 true
    • 仍然没有喜悦。我放了警报(播放);在 click 函数体内(在 if 语句之前和内部),没有效果。我在 var playing=false; 之后立即放置了它false 显示在屏幕上(不足为奇)。另外,当我将警报放在单击功能之前时,没有效果。在 audioonElement.play() 之后,您的最后一个建议设置 var playing=true - 无效。至少可以这么说,这很奇怪。
    【解决方案2】:
    var myAudio = new Audio('someSound.ogg'); 
    myAudio.addEventListener('ended', function() {
        this.currentTime = 0;
        this.play();
    }, false);
    myAudio.play();
    

    这适用于 jquery 音频。

    【讨论】:

      【解决方案3】:
       ***var audioElement = null;***     
      
       $("p").click(function (event) {
      
          ***if (audioElement) {
              audioElement.pause();
           }***
      
      var element = $(this);
      var elementID = event.target.id;
      var oggVar = (elementID +".ogg");   
      audioElement = document.createElement('audio');
      audioElement.setAttribute('src', oggVar); 
      audioElement.load();
      audioElement.addEventListener("load", function() { 
          audioElement.play(); 
      }, true);
      audioElement.play();    
      
       }); 
      

      【讨论】:

      • 谢谢,感谢您的帮助,但这似乎不起作用。我不确定为什么。你的意思是插入 - var audioElement = null; - 和 - if (audioElement) {audioElement.pause(); } - 在现有代码中指明的位置?
      猜你喜欢
      • 1970-01-01
      • 2012-03-28
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多