2014-09-10 27 views
0

我正在使用HTML5音頻播放器。我正在實施播放列表。我正在使用「已結束」事件操作來播放下一個音頻媒體文件。但是,在媒體文件結尾處,「結束」事件被多次觸發。 (當我登錄的消息會出現一個以上的時間)HTML5 AudioPlayer事件操作「已結束」正在致電超過一次

這是我的事件監聽器:

//Event Listener 
function addPlayerListener() { 
    console.log("Recording Index: "+combinedSessionIndex); 

    var audio = document.getElementById("playarea"); 
    audio.addEventListener('ended', function() { 

     sessionsToPlay = $("#audio_files").val().split(','); 

     console.log ("In Recording End Event Listener...!!!"+combinedSessionIndex); 
     //It Shows Length '1' not '0' 
     if (sessionsToPlay.length == 1) { 
      console.log("Returned Due to Session To Play length..!!!") 
      return; 
     } 

     //As CombinedSessionIndex Starts with 1 
     if (combinedSessionIndex == sessionsToPlay.length) { 
      console.log("Returned Due to All Session To Play Got Finish..!!!") 
      $("#audio_files").val(""); 
      sessionsToPlay = []; 
      combinedSessionIndex = 0; 
      return; 
     } 

     var filePath = '${properties["RECORDED_SESSION_RETREIVAL_PATH"]}'; 
     filePath = filePath + sessionsToPlay[combinedSessionIndex] + ".mp4"; 
     combinedSessionIndex++;  
     audio.src = filePath; 
     audio.play(); 
    }, false); 
} 

所以,當一個特定的媒體文件的結尾,它跳過下一個媒體文件,並開始播放下一個(以後跳過1,2)文件。對於每個跳過的媒體文件,控制進入事件監聽器,這表明在單個調用結束時重複調用事件監聽器。

首次通過我這個代碼播放音頻文件:

//PlayBack Session 
function play(data) { 

    //Just to deal with a scenario that when we play a combined session and in the mean while we start listening any other single 
    //session, then after completion of this single session, remaining previous combined session should not resume. 
    //console.log("Re-setting Player ...!!!"); 
    //$("#audio_files").val(""); 
    //sessionsToPlay = []; 
    //combinedSessionIndex = 0; 

    var filePath = '${properties["RECORDED_SESSION_RETREIVAL_PATH"]}'; 
    filePath = filePath + data + ".mp4"; 
    console.log("filePath: " + filePath); 
    if (data == null || data == "") { 
     alert("Nothing to Play ...!!!"); 
     return; 
    } 
    $("#playarea").attr({ 
     "src": filePath, 
     "autoplay": "autoplay" 
    }) 
} 

而在這之後,當此結束,進一步的剪輯播放使用「結束」事件監聽器。

我無法找到原因。如果我做錯了什麼,請引導我嗎?

在此先感謝:)

+0

如果你改變你的事件處理程序只有一行代碼調用console.log('ENDED事件處理');'並刪除所有其他代碼,你還會得到多個事件嗎?我想知道你在事件處理程序裏面做的事情是否導致一個新的結束事件,例如,如果沒有找到音頻文件,或者是令人難以置信的短,或者一些其他類似的問題? – Fenton 2014-09-10 13:17:19

+0

但播放下一個媒體文件的代碼將保持在那裏? – 2014-09-10 13:22:12

+0

現在拿出來,因爲我們想測試你是否得到了沒有任何代碼的多個事件。 – Fenton 2014-09-10 13:25:35

回答

0

啊我的壞。我經常註冊相同的事件監聽器'已結束'(每次用戶按下播放按鈕,而應該只是一次)。這就是爲什麼我不止一次「結束」事件。它實際上生成了「註冊」事件操作,用於註冊「註冊」事件的次數。

你不覺得它應該只考慮一次嗎?因爲我們的目的只是在媒體文件結束時得到通知。儘管我們多次註冊,但沒有通知多次的邏輯。

相關問題