我不太清楚如果 DOMContentLoaded这一类的事件添加太多对性能有没有什么影响,但是我的想法是 将所有需要再domReady之后自动执行的方法加在一个监听里面
这样做的好处是可以节约很多代码减少冗余,至于性能 没有测试过不敢说有什么提升 只能说凭感觉比添加多个要好
//domready综合控制器 避免添加过多事件
var domReadyController={
index:0,
stack:[],
init:function(){
//监听ready事件
if(document.addEventListener) {
document.addEventListener('DOMContentLoaded', function() {
//注销事件, 避免反复触发
document.removeEventListener('DOMContentLoaded',arguments.callee, false);
exec(domReadyController.index);
}, false);
}else if(document.attachEvent) { //IE
document.attachEvent('onreadystatechange', function() {
if(document.readyState == 'complete') {
document.detachEvent('onreadystatechange', arguments.callee);
exec(domReadyController.index);
}
});
}
function exec(i){
if(i<domReadyController.stack.length){
domReadyController.stack[i]();
domReadyController.index++;
exec(domReadyController.index);
}else{
domReadyController.index=0;
domReadyController.stack=[];
}
}
}(),
addEvent:function(func){
this.stack.push(func);
}
}
以上就是代码 自只需要在自动执行的代码里面使用domReadyController.addEvent(function(){});
将要执行的东西写成function传过去就可以了