Jquery中ready函数不用把网页全部加载完就能操作DOM,请问onload的原理是什么?
时间:2010-01-27
来源:互联网
作者: 469502097 发布时间: 2010-01-27
对于IE来说。如果dom 树未完成。则对一个元素运行doScroll() 函数会异常。而FF,则有DOMContentLoaded事件在dom树绘制之后触发。
作者: forbe 发布时间: 2010-01-27
代码:
function domReady(fn){var _timer_ = null;
void function(){
if(document.all){
try{
document.body.doScroll("left");
clearTimeout(_timer_,_timer_ = null, fn());
}catch(e){
_timer_ = setTimeout(arguments.callee,1000);
}
}else{
document.addEventListener("DOMContentLoaded", fn, false);
}
}()
}
作者: forbe 发布时间: 2010-01-27
作者: forbe 发布时间: 2010-01-27
引用:
原帖由 forbe 于 2010-1-27 11:09 发表oh, no! 第秒检测一次太慢。大意了。你可改成 10 or 100
作者: 469502097 发布时间: 2010-01-27
代码:
function domReady(fn){/*一个timer..中文称计时器..*/
var _timer_ = null;
/*一个自执行函数..就是不调用就会跑.. void function(){}(), or (function(){})() or + function(){}() or ~function(){}().. or . 手酸了.*/
void function(){
/*ie..*/
if(document.all){
try{
/*调用document.body.doScroll() 这个函数在domReady之前调用。会报错。所以这里try catch*/
document.body.doScroll("left");
/*如果通过。说明domReady了。好,清除计时器,跑你的回调函数, 否则,进入catch*/
clearTimeout(_timer_,_timer_ = null, fn());
}catch(e){
/*继续跑哪个自执行函数, 每隔100毫秒就跑一次*/
_timer_ = setTimeout(arguments.callee,100);
}
}else{
/*FF...*/
document.addEventListener("DOMContentLoaded", fn, false);
}
}()
}
作者: forbe 发布时间: 2010-01-27
我一加载问题调查了快两天了。
你的贴帮助了我。
谢谢。
为了谢你我都注册了个帐号。呵呵
作者: michaelboo 发布时间: 2011-09-29
作者: wanglong8906 发布时间: 2011-09-29
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28