Javascript 在js/jquery中播放对象数组中的音频文件
我正在制作一个对象来包装html5音频元素实例周围的控件。为了进行测试,我制作了这样一个对象(为了可读性而简化) 我有一个数组保存这个AudioObject的实例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);
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);