使用jQuery,以下内容将记录浏览器下载DOM和所有资产后应用程序已加载的内容:
$(window).load(function() {
console.log('app loaded');
});
但是我不希望这个检查在其他一些事情发生之后才会发生。
例如:
function checkLoaded()
{
$(window).load(function() {
console.log('app loaded');
});
}
所以,假设我在一系列其他函数之后调用了这个函数。
问题是,因为$(window).load(function()
是一个事件监听器,当我调用checkLoaded()
函数时,事件将不会一直运行(因为它可能已被触发,因为所有内容都已经下载到{ {1}}函数已运行)。
关于我如何做到这一点的任何想法?
我试过了:
checkLoaded()
但问题在于checkLoaded函数COULD会在几秒钟内被调用数百次,并且不是处理此问题的好方法。
UPDATE:使用checkLoaded()调用该函数;大家都知道我在调用这个函数!
更新2:
该计划基本上是这样的:
function checkLoaded()
{
if(loaded)
{
console.log('app loaded');
}
else
{
checkLoaded(); // keep checking until the loaded becomes true
}
}
$(window).load(function(){
loaded = true;
});
所以我应该能够知道loaded的状态是否为true,但是一直检查它是否为真,因为当我进入检查阶段时它可能是真或假。
答案 0 :(得分:4)
您可以在窗口加载时运行它,或者如果已经使用这种代码完成它:
function onLoad(loading, loaded) {
if (document.readyState === 'complete') {
return loaded();
}
loading();
if (window.addEventListener) {
window.addEventListener('load', loaded, false);
} else if (window.attachEvent) {
window.attachEvent('onload', loaded);
}
}
onLoad(function() {
console.log('I am waiting for the page to be loaded');
}, function() {
console.log('The page is loaded');
});
答案 1 :(得分:1)
var loaded=false;
$(window).load(function() {
loaded=true;
});
function checkLoaded()
{
// do something if loaded===true
}
答案 2 :(得分:0)
试试这个
function checkLoaded()
{
$(window).load(function() {
console.log('app loaded');
});
}
checkLoaded();
答案 3 :(得分:0)
你想制作checkLoaded块,这是一个坏主意:
javascript没有线程和阻塞,只会烧掉CPU,同时可能阻塞整个脚本。
不要像你所做的那样等待加载为真。使用eventhandler来使用它。
可能会将checkLoaded参数提供给您想要调用的函数:
function checkLoaded(continueWhenLoaded) {
$(window).load(function() {
continueWhenLoaded();
});
}
答案 4 :(得分:0)
您是否考虑过涉及jQuery的.promise()和.done()的解决方案?查看文档中的一些示例,它可能就是您要查找的内容。