2013-01-31 23 views
0

我有一系列的每個顯示的視頻的集合頁面。一種視頻播放列表,如果你願意的話。爲了方便,以解決每個視頻,我運行mediaelement.js插件上他們和MediaElement的對象在一個這樣的數組存儲:mediaelement.js同步卷

var mediaArray = []; 
$(".class").each(function (index) { 
    $(this).mediaelementplayer({ 
     success: function (mediaElement, domObject) { 
      mediaArray[index] = mediaElement; 
     } 
    }); 
}); 

這個偉大的工程讓我有外控mediaelement.js播放器處理各種mediaElement對象。例如,我可以讓用戶點擊下一個視頻的標題來切換播放該視頻。

我在哪裏碰到麻煩的是,當我嘗試允許用戶改變一部影片的體積,然後保持,當他們開始播放下一個視頻該卷。

我可以輕鬆地寫出這樣的功能:

setAllVolume = function (value) { 
     for (var i=0, il=mediaArray.length; i<il; i++) { 
      mediaArray[i].setVolume(value); 
     } 
    } 

這偉大工程,如果我有mediaelement.js控制之外的音量控制。 (例如,如果我建立一個通用的音量控制滑塊jQueryUI的)

我已經試過是添加一個事件偵聽器「changevolume」事件,並有火我setAllVolume功能是這樣的:

$(".class").each(function (index) { 
    $(this).mediaelementplayer({ 
     success: function (mediaElement, domObject) { 
      mediaArray[index] = mediaElement; 
      mediaElement.addEventListener("volumechange", function() { 
       setAllVolume(mediaElement.volume); 
      }); 
}); 

如您所想,以這種方式設置音量會導致每個mediaElement激發自己的「volumechange」事件,並遞歸調用setAllVolume函數級聯失敗堆棧,導致瀏覽器在通過一次又一次地處理。

那麼,有沒有一種方法,我可以在一個視頻的體積變化反映在其他視頻,而不會在這個遞歸? (我要指出,我使用H.264視頻和這個問題似乎使用Flash插件來播放格式瀏覽器纔會發生。)

回答

0

我認爲最快的解決我的問題將是運行通過我的數組存儲爲第I環路MediaElement的當前捲上的檢查:

setAllVolume = function (value) { 
    for (var i=0, il=mediaArray.length; i<il; i++) { 
     if (mediaArray[i].volume !== value) { 
      mediaArray[i].setVolume(value); 
     } 
    } 
}