load事件可以安全的执行JS,因为该事件是在页面完全加载完后才开始执行(包括页面内的图片、flash等所有元素),不会因为JS需要对某个DOM操作,而页面还没有加载该节点而引起错误。但是这种安全是需要付出代价的:如果某些图片(或者一些别的东西)加载特别慢,那么load事件会等到很久之后才会触发。
针对这个问题,一些JS框架提供了一些补充方法。如:jquery的$(document).ready()、mootools的domready事件。都是在页面的DOM加载完毕后立即执行,而不需要等待漫长的图片下载过程。
如果不使用这些框架,怎样实现自己的 document ready呢?请看以下一段代码:
function __clear(timer){
clearTimeout(timer);
clearInterval(timer);
return null;
};
function __attach_event(evt, callback) {
if (window.addEventListener) {
window.addEventListener(evt, callback, false);
} else if (window.attachEvent) {
window.attachEvent("on" + evt, callback);
}
}
function __domReady(f) {
// 假如 DOM 已经加载,马上执行函数
if (__domReady.done) return f();
// 假如我们已经增加了一个函数
if (__domReady.timer) {
// 把它加入待执行函数清单中
__domReady.ready.push(f);
} else {
// 为页面加载完毕绑定一个事件,
// 以防它最先完成。使用addEvent(该函数见下一章)。
__attach_event("load", __isDOMReady);
// 初始化待执行函数的数组
__domReady.ready = [f];
// 尽可能快地检查DOM是否已可用
__domReady.timer = setInterval(__isDOMReady, 100);
}
}
function __isDOMReady() {
// 如果我们能判断出DOM已可用,忽略
if (__domReady.done) return false;
// 检查若干函数和元素是否可用
if (document && document.getElementsByTagName && document.getElementById && document.body) {
// 如果可用,我们可以停止检查
__clear(__domReady.timer);
__domReady.timer = null;
// 执行所有正等待的函数
for ( var i = 0; i < __domReady.ready.length; i++ ) {
__domReady.ready[i]();
}
// 记录我们在此已经完成
__domReady.ready = null;
__domReady.done = true;
}
}
具体的调用方法:
__domReady(function() {
alert("The dom is loaded!");
});
分享到:
相关推荐
javaScript的onload事件的代码,javaScript内嵌在html中。
脱离document.onload和window.onload的onload事件,可多次添加加载事件!
主要介绍了js的image onload事件使用遇到的问题,需要的朋友可以参考下
本来按照事件顺序,小程序初始化时触发App里的onLaunch,后面再执行页面Page里的onLoad,但是在onLaunch里请求获取是否有权限,等待返回值的时候Page里的onLoad事件就已经执行了。 //app.js App({ onLaunch: ...
IE浏览器在处理GIF动画的onload...该bug是IE浏览器在处理GIF动画的onload事件时存在的一个bug,可以通过在onload事件函数中,将onload事件设置为null来解决。同时,静态GIF、JPG、BMP等其他格式的图片不会出现这个bug。
onload事件当一个页面或是一张图片加载完成时被触发,在body上不仅可以用onload,而且还支持多个HTML标签.用法如下
例如,我们可以使用onload事件来显示图片的加载进度,或者在图片加载完成时执行某些操作。 然而,onload事件不仅仅局限于图片的加载完成,还有许多其他的用法。例如,在AJAX开发中,我们可以使用onload事件来加载...
为了让函数只在页面加载完毕后才得到执行,我们会把函数绑定到onload事件上: [removed] = userFunction 但如果有两个函数:firstFunction() 和 secondFunction(),都想让它们在页面加载完毕后得到执行,该怎么办?...
在工作时,我们给一个元素绑定了事件,如果dom还没...有一种办法可以让我们避开这一难题:可以先创建一个匿名函数来容纳这两个函数,然后把那个匿名函数绑定到onload事件上,如下所示: [removed] = function(){ fi
并且随页面大小的不同情况... 解决办法是再onload触发前改变图片src的值,也就是相当于图片开始时有个临时的占位图片,页面载入过程中用js换成实际需要的src,只要每次onload事件触发前src发生变化,则onload表现正常。
仅img元素创建后却不添加到文档中会执行onload事件</title> </HEAD> <BODY> [removed] var img = document.createElement(‘img’); img.src = ...
* onload 事件的使用:onload 事件是最重要的事件之一,它可以在页面加载完成时执行某些任务。 * onmouseover 和 onmouseout 事件的使用:这两个事件通常都是配合着使用,表示对一个对象的状态改变的两种最常见情形...
前一段事件遇到一个奇怪的问题,jsp页面中写一个onload事件,发现居然不起作用,查看源文件,bady的onload后居然没有方法名??? <body onload=”这里居然是空的” bottommargin=”0″ leftmargin=”0″ ...
在需要对img进行onload事件绑定的时候,一般大家都会想到用常规的方法进行事件绑定此时大家会发现alert(1)并没有执行,这是什么原因呢?特别是在ie和ff浏览器下这是为什么呢,本文将详细为您解答
主要介绍了IE中图片的onload事件无效问题和解决方法,这是一个很经典的问题,其实只需要调换一下代码顺序即可解决,需要的朋友可以参考下
image-size使用该插件,可以在图片onload之前获取图片的大小,在瀑布流布局中,应该可能会有用处。###实现原理:使用轮询,在图片onload之前,获取到图片大小。如果图片已经被缓存过,直接返回相关信息。回调参数...