JavaScript判断页面加载完之后再执行预定函数的技巧

 更新时间:2016年05月17日 14:59:55   作者:潜行者m  
这篇文章主要介绍了JavaScript判断页面加载完之后再执行预定函数的技巧,原理还是利用监听器监听元素事件、被触发则执行函数,需要的朋友可以参考下

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

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

上面代码的意思就是,当鼠标点击 id 为 link 的元素的时候,就触发了它的 onclick 事件,然后执行使用 JavaScript 定义的 fun 函数。这样的做法肯定是很不合理的,因为触发操作直接写进了 HTML 结构里面,内容和行为没有隔离开,对日后的二次开发或者修改带来不便。
需要注意的是,当事件处理与对应元素绑定起来的时候,只有在那个元素加载完之后才能进行操作。如果说把处理的脚本放在了 head 区域,浏览器会报错。因为下面的 HTML 元素还没有加载出来,head 中的处理脚本已经被处理了。

一个好的执行 JavaScript 代码的方法应该是 行为内容分离的、在页面加载后处理 的。所以,处理 JavaScript 代码我们要用到 监听器 和 window 对象的 load 事件。

监听器

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

W3C 的标准方法叫做 addEventListener ,被IE9,chrome,firefox,opera所支持,写法:

window.addEventListener(‘load',function,false);

早期 IE 中有 attachEvent 方法效果类似:

window.attachEvent(‘onload',function);

使用监听器的方法也很简单,就是先获取页面中的某个元素,然后对这个元素使用监听器,定义监听的事件和对应的事件处理函数,就上文例子:

document.getElementById(‘link').addEventListener(‘click',fun,false);

关于监听器更加详细的使用说明,请见文末补充资料。
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(){…}

这样做虽然可以,但是很不方便,因为我们需要把所有要加载的函数名都写进去,修改起来就会很麻烦。当然办法肯定是有的,jQuery 就特别提供了很强大的多脚本加载方法,那么原生的 JavaScript 肯定也有办法。

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();
        };
      }
    }
  }

简单的来解析一下,这个自定义的 addLoadListener 函数,传递一个 函数名称 作为参数。它首先判断浏览器是否支持相关的 监听器,如果支持 监听器,就使用 监听器 监听 window 对象的 onload 事件,然后处理这个函数。这段代码使用 if 语句判断了所有浏览器的监听事件,是跨浏览器兼容的。
我们把这段代码放在 JavaScript 代码段的最上面,然后在下面定义相关函数,然后使用下面语句来加载 JavaScript 函数了。

addLoadListener(func);
function func() {…}

这样,有什么 JavaScript 函数是需要在页面加载完成之后处理的,直接使用 addLoadListener 函数即可,而且可以使用多个。通常来说,所有的 JavaScript 最好都使用 onload 事件加载,以避免意外情况发生。

相关文章

  • bootstrapvalidator之API学习教程

    bootstrapvalidator之API学习教程

    这篇文章为大家分享了bootstrapvalidator之API学习教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • javascript 操作Word和Excel的实现代码

    javascript 操作Word和Excel的实现代码

    javascript 操作Word和Excel的实现代码, 需要的朋友可以参考下。
    2009-10-10
  • 详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度

    详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度

    这篇文章主要为大家详细介绍了XMLHttpRequest响应属性、二进制数据、监测上传下载进度,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • JS实现纸牌发牌动画

    JS实现纸牌发牌动画

    这篇文章主要为大家详细介绍了JS实现纸牌发牌动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • 移动端翻页插件dropload.js(支持Zepto和jQuery)

    移动端翻页插件dropload.js(支持Zepto和jQuery)

    这篇文章主要为大家详细介绍了移动端翻页插件dropload.js,支持Zepto和jQuery,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • 微信小程序的线程架构【推荐】

    微信小程序的线程架构【推荐】

    这篇文章主要介绍了微信小程序的线程架构,每个小程序包含一个描述整体程序的app实例和多个描述页面的page,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • JavaScript 读URL参数增强改进版版

    JavaScript 读URL参数增强改进版版

    网上有不少JavaScript 读 URL 参数的函数,但没考虑到 URL 中带 # 符的情况,我的可以处理这种情况,并使用了点对象写法,优化了些性能。
    2008-10-10
  • iframe实现与父页面跨域隔离的JavaScript 代码沙箱

    iframe实现与父页面跨域隔离的JavaScript 代码沙箱

    这篇文章主要介绍了使用iframe实现与父页面跨域隔离的JavaScript代码沙箱,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 监控 url fragment变化的js代码

    监控 url fragment变化的js代码

    url 里面的 #后面的部分 可以实现无刷新的改变url 的值。这个特点非常有用。比如视频网站土豆中的豆单,你进入视频列表以后,点击播放某个视频。
    2010-04-04
  • jsp 自动编译机制详细介绍

    jsp 自动编译机制详细介绍

    这篇文章主要介绍了 Jasper的自动检测实现的机制比较简单,依靠某后台线程不断检测JSP文件与编译后的class文件的最后修改时间是否相同,若相同则认为没有改动,但倘若不同则需要重新编译,需要的朋友可以参考下
    2016-12-12

最新评论