文档章节

页面所有元素加载完成之后执行某个js函数

lgscofield
 lgscofield
发布于 2015/06/26 13:58
字数 513
阅读 46
收藏 0

在页面所有元素加载完成之后执行某个js函数

 

做项目的时候可能会遇到这种情况:

       一个JSP页面中import了一个目录文件(menu.jsp),而且每个页面的<body>中都定义了onload事件,那么在此定义window.onload函数的时候可能会不生效或者多个onload之间覆盖的现象.

       有的朋友肯定会说用jQuery的$().ready(function(){}),或者(function(){})这种方式, 其实这个函数和javascript的onload事件是由区别的,那么来看看他们的区别:

他们的主要的区别有两点:

  1. 执行时机
    window.onload方法是在网页中的所有的元素(包括元素的所有关联文件)都完全加载到浏览器之后才执行。而通过jQuery中的$(document).ready()方法注册的事件处理程序,只要在DOM完全就绪时,就可以调用了,比如一张图片只要<img>标签完成,不用等这个图片加载完成,就可以设置图片的宽高的属性或样式等。
  2. $(document).ready()方法可以多次使用而注册不同的事件处理程序,而window.onload一次只能保存对一个函数的引用,多次绑定函数只会覆盖前面的函数。
    先来看window.onload方法在一个页面上注册两次会是什么样的结果:
    function one(){
        alert("one");
    }
    function two(){
        alert("two");
    }
    window.onload = two ;
    window.onload = one ;

     

    上面的代码运行后,会弹出“one”。

    再来看看$(document).ready()方法分两次调用会是什么结果。

    function one(){
        alert("one");
    }
    function two(){
        alert("two");
    }
    $(document).ready(function(){
        one();
    });
    $(document).ready(function(){
        two();
    });
     上面的代码运行后,会分别弹出“one”和“two”。
    好了,比较完了,也就是说window.onload和jQuery的方式都无法实现,所以有了下面的实现:
    var $$ = function(func){
                if (document.addEventListener) {
                    window.addEventListener("load", func, false);
                }
                else if (document.attachEvent) {
                    window.attachEvent("onload", func);
                }
            }
            
            $$(function(){
            	show();
            })
     使用的时候只要这样:
    $$(function(){...此处加上需要执行的内容...});即可...

     

本文转载自:http://lgscofield.iteye.com/blog/1884352

共有 人打赏支持
lgscofield

lgscofield

粉丝 23
博文 140
码字总数 63036
作品 0
南京
架构师
私信 提问
高性能Javascript--脚本的无阻塞加载策略

Javascript在浏览器中的性能,可以说是前端开发者所要面对的最重要的可用性问题。 在Yahoo的Yslow23条规则当中,其中一条是将JS放在底部 。原因是,事实上,大多数浏览器使用单进程处理UI和更...

Junn
2014/10/10
0
2
Javascript 异步加载详解

一、同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后...

Carl_
2014/09/15
0
0
Javascript 异步加载详解

一、同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后...

张悟空
2014/08/18
0
0
浏览器加载渲染网页过程解析(二)

浏览器的工作机制,一句话概括起来就是:web浏览器与web服务器之间通过HTTP协议进行通信的过程。所以,C/S之间握手的协议就是HTTP协议。浏览器接收完毕开始渲染之前大致过程如下 : 从浏览器...

长平狐
2012/11/28
180
0
javascript性能优化:创建javascript无阻塞脚本

  javaScript 在浏览器中的运行性能,在web2.0时代显得尤为重要,成千上万行javaScript代码无疑会成为性能杀手, 在较低版本的浏览器执行JavaScript代码的时候,由于浏览器只使用单一进程来...

grootzhang
2016/04/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
30分钟前
1
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
1
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
1
0
推荐转载连接

https://www.cnblogs.com/ysocean/p/7409779.html#_label0

小橙子的曼曼
昨天
3
0
雷军亲自打造的套餐了解下:用多少付多少

12月28日消息,小米科技创始人兼CEO雷军微博表示,小米移动任我行套餐方案,原则上就是明明白白消费,用多少付多少,不用不花钱!上网、电话和短信都是一毛钱,上网0.1元/M,电话0.1元/分钟,...

linuxCool
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部