Jquery mediaelement.js在多个视频中同步卷

Jquery mediaelement.js在多个视频中同步卷,jquery,video,html5-video,mediaelement.js,Jquery,Video,Html5 Video,Mediaelement.js,我有一系列页面,每个页面都显示一组视频。一种视频播放列表,如果你愿意的话。为了便于处理每个视频,我在视频上运行了mediaelement.js插件,并将mediaelement对象存储在如下数组中: var mediaArray = []; $(".class").each(function (index) { $(this).mediaelementplayer({ success: function (mediaElement, domObject) {

我有一系列页面,每个页面都显示一组视频。一种视频播放列表,如果你愿意的话。为了便于处理每个视频,我在视频上运行了mediaelement.js插件,并将mediaelement对象存储在如下数组中:

var mediaArray = [];
$(".class").each(function (index) {
    $(this).mediaelementplayer({
        success: function (mediaElement, domObject) {
            mediaArray[index] = mediaElement;
        }
    });
});
    setAllVolume = function (value) {
        for (var i=0, il=mediaArray.length; i<il; i++) {
            mediaArray[i].setVolume(value);
        }
    }
$(".class").each(function (index) {
    $(this).mediaelementplayer({
        success: function (mediaElement, domObject) {
            mediaArray[index] = mediaElement;
            mediaElement.addEventListener("volumechange", function () {
                setAllVolume(mediaElement.volume);
            });
});
这非常适合让mediaelement.js播放器之外的控件处理各种mediaelement对象。例如,我可以让用户点击下一个视频的标题,切换到播放那个视频

我遇到的麻烦是,我试图允许用户更改其中一个视频的音量,然后在他们开始播放下一个视频时保持该音量

我可以很容易地编写这样的函数:

var mediaArray = [];
$(".class").each(function (index) {
    $(this).mediaelementplayer({
        success: function (mediaElement, domObject) {
            mediaArray[index] = mediaElement;
        }
    });
});
    setAllVolume = function (value) {
        for (var i=0, il=mediaArray.length; i<il; i++) {
            mediaArray[i].setVolume(value);
        }
    }
$(".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插件播放该格式的浏览器中出现。)

我认为解决我的问题的最快方法是在我循环我的阵列时对存储的mediaElement的当前卷进行检查:

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