我有一系列的每個顯示的視頻的集合頁面。一種視頻播放列表,如果你願意的話。爲了方便,以解決每個視頻,我運行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插件來播放格式瀏覽器纔會發生。)