1.DOMContentLoaded
DOMContentLoaded是FF,Opera 9的特有的Event, 当所有DOM解析完以后会触发这个事件。
jquery的ready(示例:$("selector).ready(function(){})),MT的onDomReady
IE下是scrollleft事件可以时就表示DomcontentLoaded: var temp= document.createElement('div');temp.doScroll('left');
Fired on a Window object when a document's DOMcontent is finished loading, but unlike "load", does not wait untilall images are loaded. Used for example by GreaseMonkey to sneak in to alterpages before they are displayed.
This event, as many others on this page, is dispatched to"trusted" targets only; for example, it is not dispatched to thecontent of the main browser object in Firefox, even if it comes from a chrome:/URI.
一下是jQuery ,yui ,extjs 三个框架对domcontentloaded 的实现方式,请大家参考
- function bindReady(){
- if ( readyBound ) return;
- readyBound = true;
- // Mozilla, Opera and webkit nightlies currently support this event
- if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", function(){
- document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
- jQuery.ready();
- }, false );
- // If IE event model is used
- } else if ( document.attachEvent ) {
- // ensure firing before onload,
- // maybe late but safe also for iframes
- document.attachEvent("onreadystatechange", function(){
- if ( document.readyState === "complete" ) {
- document.detachEvent( "onreadystatechange", arguments.callee );
- jQuery.ready();
- }
- });
- // If IE and not an iframe
- // continually check to see if the document is ready
- if ( document.documentElement.doScroll && typeof window.frameElement === "undefined" )
- (function(){
- if ( jQuery.isReady ) return;
- try {
- // If IE is used, use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- document.documentElement.doScroll("left");
- } catch( error ) {
- setTimeout( arguments.callee, 0 );
- return;
- }
- // and execute any waiting functions
- jQuery.ready();
- })();
- }
- // A fallback to window.onload, that will always work
- jQuery.event.add( window, "load", jQuery.ready );
- }
YUI:
- /*! DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */
- // Internet Explorer: use the readyState of a defered script.
- // This isolates what appears to be a safe moment to manipulate
- // the DOM prior to when the document's readyState suggests
- // it is safe to do so.
- if (EU.isIE) {
- // Process onAvailable/onContentReady items when the
- // DOM is ready.
- YAHOO.util.Event.onDOMReady(
- YAHOO.util.Event._tryPreloadAttach,
- YAHOO.util.Event, true);
- var n = document.createElement('p');
- EU._dri = setInterval(function() {
- try {
- // throws an error if doc is not ready
- n.doScroll('left');
- clearInterval(EU._dri);
- EU._dri = null;
- EU._ready();
- n = null;
- } catch (ex) {
- }
- }, EU.POLL_INTERVAL);
- // The document's readyState in Safari currently will
- // change to loaded/complete before images are loaded.
- } else if (EU.webkit && EU.webkit < 525) {
- EU._dri = setInterval(function() {
- var rs=document.readyState;
- if ("loaded" == rs || "complete" == rs) {
- clearInterval(EU._dri);
- EU._dri = null;
- EU._ready();
- }
- }, EU.POLL_INTERVAL);
- // FireFox and Opera: These browsers provide a event for this
- // moment. The latest WebKit releases now support this event.
- } else {
- EU._simpleAdd(document, "DOMContentLoaded", EU._ready);
- }
- /////////////////////////////////////////////////////////////
- EU._simpleAdd(window, "load", EU._load);
- EU._simpleAdd(window, "unload", EU._unload);
- EU._tryPreloadAttach();
- })();
EXTJS:
- function initDocReady(){
- var COMPLETE = "complete";
- docReadyEvent = new Ext.util.Event();
- if (Ext.isGecko || Ext.isOpera) {
- DOC.addEventListener(DOMCONTENTLOADED, fireDocReady, false);
- } else if (Ext.isIE){
- DOC.write("<S"+'CRIPT id=" + IEDEFERED + " src="/'+'/:" defer="defer"></S'+"CRIPT>");
- DOC.getElementById(IEDEFERED).onreadystatechange = function(){
- if(this.readyState == COMPLETE){
- fireDocReady();
- }
- };
- } else if (Ext.isWebKit){
- docReadyProcId = setInterval(function(){
- if(DOC.readyState == COMPLETE) {
- fireDocReady();
- }
- }, 10);
- }
- // no matter what, make sure it fires on load
- E.on(WINDOW, "load", fireDocReady);
- };
总结各大主流框架的做法,写了以下这个版本。主要是尽量的做到优化并考虑到FF2下的Bug,提供一个是否使用DOMContentLoaded的开关配置。
- /*
- * 注册浏览器的DOMContentLoaded事件
- * @param { Function } onready [必填]在DOMContentLoaded事件触发时需要执行的函数
- * @param { Object } config [可选]配置项
- */
- function onDOMContentLoaded(onready,config){
- //浏览器检测相关对象,在此为节省代码未实现,实际使用时需要实现。
- //var Browser = {};
- //设置是否在FF下使用DOMContentLoaded(在FF2下的特定场景有Bug)
- this.conf = {enableMozDOMReady:true};
- if( config )
- for( var p in config)
- this.conf[p] = config[p];
- var isReady = false;
- function doReady(){
- if( isReady ) return;
- //确保onready只执行一次
- isReady = true;
- onready();
- }
- /*IE*/
- if( Browser.ie ){
- (function(){
- if ( isReady ) return;
- try {
- document.documentElement.doScroll("left");
- } catch( error ) {
- setTimeout( arguments.callee, 0 );
- return;
- }
- doReady();
- })();
- window.attachEvent('onload',doReady);
- }
- /*Webkit*/
- else if (Browser.webkit && Browser.version < 525){
- (function(){
- if( isReady ) return;
- if (/loaded|complete/.test(document.readyState))
- doReady();
- else
- setTimeout( arguments.callee, 0 );
- })();
- window.addEventListener('load',doReady,false);
- }
- /*FF Opera 高版webkit 其他*/
- else{
- if( !Browser.ff || Browser.version != 2 || this.conf.enableMozDOMReady)
- document.addEventListener( "DOMContentLoaded", function(){
- document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
- doReady();
- }, false );
- window.addEventListener('load',doReady,false);
- }
- }
2.Onload
onload要等到所有页面元素加载完成才会触发, 包括页面上image、flash、iframe等内容都加载完毕才会执行。
另外 onload 是window 的事件 可以直接只用window.onload=function(){}使用
DomContentLoaded是document 上的事件续注册后使用 document.addEventListener('DomContentLoaded',function(){});
相关推荐
这意味着,页面上所有的内容都已经被完全加载并渲染后,才会执行与onload事件绑定的函数。 这里需要特别注意的是,我们在使用window.onload时的两种不同写法。在示例中,第一种写法为: ```javascript window....
可以通过检查 `window.onload` 是否已经定义并将其转换为函数,然后将其与新函数合并。以下是一个示例: ```javascript var o = window.onload; if ((typeof o)=='function') { window.onload = function(){ o...
此外,如果需要在所有浏览器中保持一致的行为,还可以考虑使用`window.onload`或`document.DOMContentLoaded`事件来确保在所有图片加载完毕后再执行后续操作。但请注意,这些全局事件可能会影响整个页面的加载时机,...
特别地,当涉及页面加载完毕时的事件处理函数时,我们必须区分jQuery中的$(document).ready()与JavaScript原生的window.onload()方法。 首先,JavaScript的window.onload事件处理函数是一个传统的JavaScript事件,...
另外,可以考虑使用`window.onload`或`DOMContentLoaded`事件来确保整个页面资源(包括外部样式表)加载完毕后再执行特定操作。 总的来说,onload和onreadystatechange事件在浏览器之间的支持并不统一,这要求...
描述中提到了window.onload事件与DOMContentLoaded事件的区别。window.onload事件是等整个页面完全加载完成后才会触发,这包括所有图片、脚本、样式表、iframe等资源,通常会较晚触发,而DOMContentLoaded仅需DOM树...
在W3C标准中,DOMContentLoaded事件与ready事件类似,它会在DOM完全加载和解析完成后触发,而不必等待样式表、图片和子框架的加载完成。这为开发者提供了更好的灵活性和控制能力。现在许多流行的JavaScript库(例如...
此外,window.onload与DOMContentLoaded事件也是有区别的。window.onload关注的是整个页面完全加载完毕,包括样式表、图片、脚本等资源。而DOMContentLoaded事件则只需要DOM结构加载完毕后就会触发,这个时间点通常...
3. **使用`defer`属性**:对于`<script>`元素,可以使用`defer`属性确保脚本在DOM解析完成后、`DOMContentLoaded`事件触发之前执行。但这不适用于`<img>`元素。 4. **使用`new Image()`构造函数**:在JavaScript中...
形象的描述了async与defer的区别,简单易懂的理解 async是异步执行,异步下载完毕后就会执行,不确保执行顺序,一定在 onload前,但不确定在 DOMContentLoaded事件的前或后 defer是延迟执行,在浏览器看起来的效果像...
这是因为`jQuery`会监听DOM的`DOMContentLoaded`事件,一旦这个事件触发,`ready`函数内的代码就会运行。例如: ```javascript $(document).ready(function() { alert("加载结束"); }); ``` 上面的代码会在DOM...
`window.onload`和`DOMContentLoaded`是两个关键的事件,用于监听页面加载的不同阶段。它们各自有其应用场景和优势。 首先,`window.onload`事件是在整个页面(包括HTML、CSS、JavaScript、图片和其他外部资源)...
在其他浏览器中,通常使用 `addEventListener` 监听 `DOMContentLoaded` 或 `window.onload` 事件来确保元素已经完全加载并计算尺寸。 总的来说,`offsetHeight` 在 `onload` 事件中获取为 0 主要是因为浮动布局...
JavaScript页面渲染完毕时间的监听是前端开发者不可或缺...通过合理选择和使用`window.onload`、`$(document).ready`或`DOMContentLoaded`事件,我们可以确保在正确的时间执行必要的操作,从而提升网页的性能和交互性。
了解DOMContentLoaded为什么如此重要 在DOMContentLoaded上设置一个事件 介绍 使用JavaScript的重要部分是确保您的代码在正确的时间运行。 有时您可能不得不添加一些额外的代码,以确保您的代码在页面准备就绪之前...
了解DOMContentLoaded为什么如此重要 在DOMContentLoaded上设置一个事件 介绍 使用JavaScript的重要部分是确保您的代码在正确的时间运行。 有时您可能不得不添加一些额外的代码,以确保您的代码在页面准备就绪之前...
了解DOMContentLoaded为什么如此重要 在DOMContentLoaded上设置一个事件 介绍 使用JavaScript的重要部分是确保您的代码在正确的时间运行。 有时您可能不得不添加一些额外的代码,以确保您的代码在页面准备就绪之前...
在JavaScript编程领域,"addonload: 添加多个[removed]函数的简单函数"是一个与扩展功能或模块加载相关的主题。在JavaScript环境中,特别是浏览器或Node.js环境中,开发人员经常需要加载和管理自定义的功能或第三方...
总结来说,确保代码在DOM加载完成后再执行是网页开发中的基础实践,可以利用jQuery的`$(document).ready()`或者原生JavaScript的`DOMContentLoaded`和`window.onload`事件来实现这一目标。正确使用这些方法可以优化...
与DOMContentLoaded事件不同,onload事件会在整个页面的资源(包括DOM、样式表、图片、flash等)完全加载完成后触发。这意味着onload事件标志着整个页面加载的结束。它适合用来执行依赖于页面全部资源加载完成后的...