告诉javascript中何时完成多个onLoad事件
我必须加载两个API。YouTube api在加载时调用告诉javascript中何时完成多个onLoad事件,javascript,jquery,onload-event,Javascript,Jquery,Onload Event,我必须加载两个API。YouTube api在加载时调用onYouTubePlayerReady,另一个用于SoundManager的api在加载时调用SoundManager.onready(…)。我在每个ready函数中都做了大量工作来准备站点。但是,我还需要知道这两个都是何时完成的,这样我就可以进行更多的初始化,这需要两个都完全加载。知道如何在调用这两个ready函数时调用一个函数吗?对这两个函数都使用回调 var callback = (function(){ var coun
onYouTubePlayerReady
,另一个用于SoundManager的api在加载时调用SoundManager.onready(…)
。我在每个ready
函数中都做了大量工作来准备站点。但是,我还需要知道这两个都是何时完成的,这样我就可以进行更多的初始化,这需要两个都完全加载。知道如何在调用这两个ready
函数时调用一个函数吗?对这两个函数都使用回调
var callback = (function(){
var count = 0;
return function(){
count++;
if(count === 2){
//both ran and do something
}
}
})();
然后,在两个OnLoad结束时,只需执行以下操作:
callback();
if语句中的内容只会在第二次调用此函数时运行
小提琴演示:对它们都使用回调
var callback = (function(){
var count = 0;
return function(){
count++;
if(count === 2){
//both ran and do something
}
}
})();
然后,在两个OnLoad结束时,只需执行以下操作:
callback();
if语句中的内容只会在第二次调用此函数时运行
小提琴演示:只需设置几个标志:
var aDone = false;
var bDone = false;
function whenADone(){
// do your other stuff
aDone = true;
if(bDone) whenBothDone();
}
function whenBDone(){
// do your other stuff
bDone = true;
if(aDone) whenBothDone();
}
只需设置几个标志:
var aDone = false;
var bDone = false;
function whenADone(){
// do your other stuff
aDone = true;
if(bDone) whenBothDone();
}
function whenBDone(){
// do your other stuff
bDone = true;
if(aDone) whenBothDone();
}
您可以让两个
ready
将布尔值设置为true,然后对$(document.ready)进行测试(函数(){if(youTube==true&&soundManager==true){//Do stuff})
您可以让您的两个ready设置一个布尔值为true,然后针对这些布尔值测试$(document).ready(函数(){if(youTube==true&&soundManager==true){//Do stuff})代码>可能有更好的方法处理延迟的,但这很简单,应该可以工作。只需记录加载的内容和未加载的内容
var status = {
youtube: false,
sound: false
};
var loaded = function() {
if (!status.youtube) return;
if (!status.sound) return;
// load stuff!
};
var onYoutubePlayerReady = function() {
status.youtube = true;
loaded();
};
soundManager.onready = function() {
status.sound = true;
loaded();
}
也许有更好的方法来处理延迟的问题,但这很简单,应该可以奏效。只需记录加载的内容和未加载的内容
var status = {
youtube: false,
sound: false
};
var loaded = function() {
if (!status.youtube) return;
if (!status.sound) return;
// load stuff!
};
var onYoutubePlayerReady = function() {
status.youtube = true;
loaded();
};
soundManager.onready = function() {
status.sound = true;
loaded();
}
如果使用jQuery,请查看以下内容:
谢谢如果使用jQuery,请查看以下内容:
感谢使用,您可以为每个就绪功能构建承诺,并将其与结合起来以触发最终操作。比如说
function promiseYoutube() {
var dfd = $.Deferred();
window.onYoutubePlayerReady = function() {
console.log("Youtube");
dfd.resolve();
};
return dfd.promise();
}
function promiseSoundManager() {
var dfd = $.Deferred();
window.soundManager.onready = function() {
console.log("SoundManager");
dfd.resolve();
};
return dfd.promise();
}
$.when( promiseYoutube(), promiseSoundManager() ).then(function(){
console.log('Youtube+SoundManager');
});
通过一个Fiddle模拟这些回调,您可以为每个就绪函数构建承诺,并将它们与结合起来以触发最终操作。比如说
function promiseYoutube() {
var dfd = $.Deferred();
window.onYoutubePlayerReady = function() {
console.log("Youtube");
dfd.resolve();
};
return dfd.promise();
}
function promiseSoundManager() {
var dfd = $.Deferred();
window.soundManager.onready = function() {
console.log("SoundManager");
dfd.resolve();
};
return dfd.promise();
}
$.when( promiseYoutube(), promiseSoundManager() ).then(function(){
console.log('Youtube+SoundManager');
});
而一把小提琴模拟这些回调答案,只使用链接并没有那么有用,请解释延迟回复在这种情况下是如何有用的。链接是可以的,但我不需要转到其他页面来了解你的意思。一个进一步解释的链接是可以的。只有链接的答案没有那么有用,请解释延迟回答在这种情况下是如何有用的。链接是可以的,但我不需要转到其他页面来了解你的意思。进一步解释的链接是可以的。@Raynos哈哈,我甚至不知道abt:-P@AlexisK没问题,我很乐意help@Raynos哈哈,我甚至不知道:-P@AlexisK没问题,很乐意帮忙,很酷。谢谢你的回答。它会起作用,但对于问题来说要复杂一点。不过,我下次一定会记住这一点。谢谢,很酷。谢谢你的回答。它会起作用,但对于问题来说要复杂一点。不过,我下次一定会记住这一点。谢谢