使用原生 javascript 在页面加载完成后处理多个函数

我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  
文章目录 [隐藏]
  • 使用监听器让脚本与 html 元素分离
  • window.onload 事件
  • 结合监听器和 window.onload 实现页面加载完处理多个函数
powered by toc

网页中的 javascript 脚本运行是需要通过事件去触发的。一般的做法就是在网页中,直接编写几个函数,有的在代码被加载的时候就被浏览器处理,或者使用类似下面的代码来触发实现函数的相关功能。

<div id="link" onclick="fun()" ></div>

上面代码的意思就是,当鼠标点击 id 为 link 的元素的时候,就触发了它的 onclick 事件,然后执行使用 javascript 定义的 fun 函数。这样的做法肯定是很不合理的,因为触发操作直接写进了 html 结构里面,内容和行为没有隔离开,对日后的二次开发或者修改带来不便。

此外,当事件处理与对应元素绑定起来的时候,只有在那个元素加载完之后才能进行操作。如果说把处理的脚本放在了 head 区域,浏览器会报错。因为下面的 html 元素还没有加载出来,head 中的处理这部分 html 元素的脚本已经被执行了。

javascript 正确的使用方法应该是 脚本与 html 元素分离、当页面加载完成之后再去执行。本文就来讲解如何使用原生 javascript 来实现。

使用监听器让脚本与 html 元素分离

监听器实际上的功能就是行为与内容分离的。以前需要在 html 中加上一些触发事件来触发 javascript 的相关函数,而现在直接在 javascript 中对某个元素的使用监听器,监听这个元素的事件,如果这个元素被触发了某些事件,在监听器中又定义了这个事件对应的处理函数,那么就会处理这个函数。

w3c 的标准方法叫做 addeventlistener ,被ie9,chrome,firefox,opera所支持,写法:


window.addeventlistener('load',function,false);

早期 ie 中有 attachevent 方法效果类似(做 ie 兼容用):


window.attachevent('onload',function);

上面这两条监听器的功能就是:监听 window 对象,如果 window 对象的 load (加载完成)事件被触发,那么就执行 function 这个函数。使用监听器的方法很简单,就是先获取页面中的某个元素,然后对这个元素使用监听器,定义监听的事件和对应的事件处理函数,就上文例子可以使用下面语句代替:


document.getelementbyid('link').addeventlistener('click',fun,false);

这样,我们就实现了 javascript 与 html 元素分离。关于监听器更加详细的资料,请自行搜索,本文不再赘述。

window.onload 事件

onload 事件只有在整个页面已经完全载入的时候才会被触发,我们将 javascript 代码写进 onload 事件中,就可以保证在 html 元素被加载完成之后,浏览器才会处理我们的 javascript 代码。基础的写法:


window.onload = function(){
 //code
}

这样,这个函数里面的 code 会在加载完成之后被处理。但是,这种方法有个缺陷,就是只能用于这一个函数。页面中无法出现多个 window.onload 事件,如果出现了多个 onload 事件,那么后面的内容会覆盖前面的。

那么,我们可以这样做,在一个 window.onload 事件中,写上所有需要加载的函数名,然后在外面定义函数:


window.onload = function(){
   func1();
   func2();
 }

function func1(){...}
function func2(){...}

这样做虽然可以解决在网页内容加载完成之后执行对应 javascript 代码,但是很不方便,因为我们需要把所有要加载的函数名都写进去,修改起来就会很麻烦。

结合监听器和 window.onload 实现页面加载完处理多个函数

这里需要特别提到监听器的一个优势:可以为一个元素上的同一个事件添加或者去除多个处理函数。前面说过 window.onload 事件加载的缺陷是只能在页面中使用一次。而使用监听器的方法,就可以监听为 window 的 onload 事件分别加载多个函数了。我们需要自己编写一个函数:


function addloadlistener(fn){
    if (typeof window.addeventlistener != 'undefined'){
        window.addeventlistener('load',fn,false);
    }else if(typeof document.addeventlistener != 'undefined'){
        document.addeventlistener('load',fn,false);
    }else if (typeof window.attachevent != 'undefined'){
        window.attachevent('onload',fn);
    }else{
        var oldfn = window.onload;
        if(typeof window.onload != 'function'){
            window.onload = fn;
        }else{
            window.onload = function(){
                oldfn();
                fn();
            };
        }
    }
}

这个函数使用 if 语句判断了浏览器对监听器的支持情况并且分别进行处理。如果不支持监听器,那么就使用默认的 window.onload 方法加载。这个函数的使用方法也比较简单,把它放在 javascript 的最顶部,然后在下面编写功能函数,如果需要将某个功能函数使用这种方法加载,就可以把函数名作为参数调用这个自定义的 addloadlistener 。代码如下:


addloadlistener(func);
function func() {...}

这样,就实现了页面加载完成之后处理多个函数了。

本站长期承接 wordpress 项目,详情请加 qq:11497107 或者 email:denis@wpjam.com
如有 wordpress 问题,请到 wpjam 问答提问!qq 上不方便解答!

标签:javascript

随意打赏

提交建议
微信扫一扫,分享给好友吧。