$(window).load()方法理解、使用场景

$(window).load()、window.οnlοad=function(){}和$(document).ready()方法的区别

1、$(window).load() 和window.οnlοad=function(){}

     是页面中的所有元素(包括图片、flash)等都加载完毕后,才能执行;

     $(document).ready() 是页面中的DOM元素加载完成后便可执行。

2、$(window).load()和window.οnlοad=function(){}

     不同的是,前者可以和$(document).ready()一样,可以同时加载多个函数。

window和document的区别 

1、window代表的是浏览器窗口,即可视的浏览器窗口

      document代表的是整个页面的dom元素   即document只是window的一个属性;

2、两者的区别在页面有滚动条时可以直观的显示出来,当出现滚动条时,$(window).height和$(document).height是不相等的,$(document).height比$(window).height大,因为window的高度始终都是可见的浏览器窗口的高度,而document的高度则是整个页面的dom元素的高度,即超出一屏幕了。

 

 $(window).load()方法的使用场景

1、当某一触发事件,需要页面的所有元素都加载完毕后才执行,并且元素不是通过ajax回调填充的情况下,使用$(window).load()即可。


2、当某一触发事件,需要页面的所有元素都加载完毕后才执行,并且元素是通过ajax回调填充的情况下,使用$(window).load()会出现有时有效,有时无效的情况。

因为回调的html元素的加载完成可能在$(window).load()执行之后,load事件主要就是用来代替原生的window.onload,它只能用在两个场景下:

  · window对象上。比如$(window).load(fn);。

  · 带有URL的元素(images, scripts, frames, iframes)。比如$(“img”).load(fn);。

  除此之外,任何元素都没有load事件,比如:$(document).load(fn);这是错误的写法,根本不会执行。

  load事件需要页面完全加载完成才可以触发,所谓的完全加载完,不仅仅是dom结构加载完,还需要所有的链接引用都加载完才可以。比如页面中有大量图片,必须等每一个图片都加载完成,才叫完全加载完。

  最重要的还没说,jQuery官方文档明确说明load事件的跨浏览器兼容性很差(It doesn't work consistently nor reliably cross-browser)。经过测试,谷歌浏览器仅仅支持(window).load(fn);,而火狐浏览器支持(window).load(fn);,而火狐浏览器支持(window).load(fn);和$(“img”).load(fn);。所以,除非必要情况下,否则强烈不推荐使用load事件。

  而ready事件可以加在任意元素上,比如(window).ready(fn);、(window).ready(fn);、(document).ready(fn);、$(“div”).ready(fn);等等。ready事件不要求页面完全加载完,只需要加载完dom结构即可触发

一般情况下一个页面响应加载的基本顺序是:域名解析 -> 加载html -> 加载js和css -> 加载图片等其他信息。那么在编写JS脚本时什么情况下使用(document).ready()又在什么情况下使用(document).ready()又在什么情况下使用(window).load呢;

一、$(document).ready()

从字面的意思上理解,就是文档准备好了。也就是浏览器已经加载并解析完整个html文档,dom树已经建立起来了,然后执行此函数

原生JavaScript中的写法如下:

document.ready=function(){
 alert("ready"); 
}

 jQuery中的写法如下:

$(document).ready(function(){
 alert("ready");
});

或

$(function(){
 alert("ready");
});

二、$(window).load

在网页中所有元素(包括页面中图片,css文件等所有关联文件)完全加载到浏览器后才执行

原生JavaScript中的写法如下:

window.onload = function(){ 
 alert("onload"); 
};

jQuery中的写法如下:

$(window).load(function(){
 alert("onload");
});

两者的区别在于:

1.执行时间不同

$(document).ready()是在页面完成HTML的加载并建立了DOM树之后就开始执行,但这并不代表页面的所有数据已经全部加载完成,一些大的图片有会在建立DOM树之后很长一段时间才行加载完成,而$(window).load()就是整个页面已经加载完毕后才执行,包括图片等一些关联文件。

2.可以被执行的次数不同

(document).ready()可以在JavaScript代码中出现多次,并且里面的函数或者代码都可以执行;而(window).load()只能在JavaScript代码中出现一次,如果有多个(window).load(),那么只有最后一个(window).load()里面的函数或者代码才会执行,之前的$(window).load()都将被覆盖;

3.执行的效率不同

如要在dom的元素节点中添加onclick属性节点,这时用(document).ready()就要比用(window).load()的效率高;但是在某些时候还必须得用$(window).load()才行;比如最近一个项目,微博系统,必须等所有dom和图片加载完毕后执行动态高度;

$(window).load(function(){
    allHeight();//微博左右高度保持一致
})

总结一下就是:(window).load()在(document).ready之后执行,且页面中所有内容全部加载完成后才会执行

猜你喜欢

转载自blog.csdn.net/hi1234560/article/details/127256028
今日推荐