Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在js/jquery中播放对象数组中的音频文件_Javascript_Jquery_Arrays_Html_Audio - Fatal编程技术网

Javascript 在js/jquery中播放对象数组中的音频文件

Javascript 在js/jquery中播放对象数组中的音频文件,javascript,jquery,arrays,html,audio,Javascript,Jquery,Arrays,Html,Audio,我正在制作一个对象来包装html5音频元素实例周围的控件。为了进行测试,我制作了这样一个对象(为了可读性而简化) 我有一个数组保存这个AudioObject的实例 var AudioObjects = []; 然后,在创建新的AudioObjects时,我将它们添加到阵列中。我有一个函数,可以延迟播放AudioObjects,以便它们按顺序播放。大概是这样的: var audioObj = new AudioObject(audio); AudioObjects.push(audioObj);

我正在制作一个对象来包装html5音频元素实例周围的控件。为了进行测试,我制作了这样一个对象(为了可读性而简化)

我有一个数组保存这个AudioObject的实例

var AudioObjects = [];
然后,在创建新的AudioObjects时,我将它们添加到阵列中。我有一个函数,可以延迟播放AudioObjects,以便它们按顺序播放。大概是这样的:

var audioObj = new AudioObject(audio);
AudioObjects.push(audioObj);
....
....
var delay = 0;
$.each(AudioObjects, function(iterator, obj) {
    setTimeout(obj.Play, delay);
    delay = delay + 3000;
}
当只有一个音频文件时,它会正确播放,但一旦我添加了更多AudioObjects,数组中的每个文件都会将其innerAudio变量设置为最新创建的audio元素。我可以从html中单独播放每一个。我已经调试了创建,我可以看到它设置了正确的音频,但是在被推到阵列后,阵列中的对象都被切换到最新的innerAudio

我没有正确实例化我的对象吗?我尝试过使用提醒文本,但它似乎没有我遇到的问题

更新:我想我发现了我的问题。这就是我认为在对象内部编写“public”和“private”函数的方式

function Thing(test) {
    var thingTest = test;

    // Public function
    this.PublicTest = function () {
        setTimeout(Test, 1000);
    }

    // Private function
    PrivateTest = function () {
       alert(thingTest);
    }
}
这就是我的代码的基本结构,但是“private”函数的作用域与public函数的作用域不同。我仔细检查了我的数组,它实际上是在用正确的音频源保存正确的audioObject,但是当运行调用“private”函数的函数时,它调用了错误的音频文件

我已经更新以显示发生了什么。我以为它会先警告“test1”然后警告“test2”,但它会警告“test2”两次

更新2:对于记录,将私有函数更改为此已修复问题:

function Play() {   // <<< That's all I had to change!
    innerAudio.play()
}

function Play(){/是否为每个音频包装创建唯一的aduio对象

var audio = new Audio();
audio.src = 'src';

var audioObj = new AudioObject(audio);
AudioObjects.push(audioObj);

我很确定我是这样做的。这是制作新AudioObject的一行。var recObj=newAudioObject(0,audio.duration,audio);在制作对象的时候,“audio”指的是与AudioObjects数组中的AudioObject不同的src。当我推送此新对象时,数组中的对象将发生更改。啊!我发现了我的问题!!我正在更新我的原始帖子。
var audio = new Audio();
audio.src = 'src';

var audioObj = new AudioObject(audio);
AudioObjects.push(audioObj);