- 如何在页面加载完成后立即执行多个函数?
当我们希望事件处理函数在页面加载完毕后立刻执行时,会用到window.onload,但如果我们有多个函数,我们希望它们在页面加载完毕时都能够得到执行该怎么办呢?
如果把它们绑定到window.onload事件上,那么它们会被逐一覆盖,只有最后一个会被执行:
window.firstFunction;
window.secondFunction;
window.thirdFunction;
这段代码执行时,只有thirdFunction会在页面加载完毕后立刻执行。
有一种弹性最佳的解决方案:使用addLoadEvent函数。
- 解决方案:使用addLoadEvent函数
addLoadEvent函数由Simon Willison编写。
它只有一个参数:打算在页面加载完毕时执行的函数名称。
addLoadEvent函数代码:
- 把现有的window.onload事件处理函数的值存入变量oldonload
- 如果这个事件处理函数上还没有绑定任何函数,就直接添加新函数给它;
- 如果这个事件处理函数上已经绑定了函数,就把新函数追加到现有代码的末尾。
function addLoadEvent(func){
var oldwindow.onload;
if (typeof window.onload!="function") {//如果window.onload没有绑定函数;
window.func;//直接将新函数添加给window.onload;
}
else{
window.function(){//如果window.onload绑定了事件处理函数
oldonload();
func();//在末尾追加新函数
}
}
}
当我们需要某个函数在页面加载完毕之后立即执行,只需要添加语句addLoadEvent(funcName)就可以了。
addLoadEvent(firstFunction);
addLoadEvent(secondFunction);
addLoadEvent(thirdFunction);
完整代码示例:
function firstFunction(){}
function secondFunction(){}
function thirdFunction(){}
function addLoadEvent(func){
var oldwindow.onload;
if (typeof window.onload!="function") {//如果window.onload没有绑定函数;
window.func;//直接将新函数添加给window.onload;
}
else{
window.function(){//如果window.onload绑定了事件处理函数
oldonload();
func();//在末尾追加新函数
}
}
}
addLoadEvent(firstFunction);
addLoadEvent(secondFunction);
addLoadEvent(thirdFunction);