美文网首页
浅谈使用原生JS在页面加载完成之后处理多个函数

浅谈使用原生JS在页面加载完成之后处理多个函数

作者: 就叫帅小飞吧 | 来源:发表于2016-07-18 22:14 被阅读2495次

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

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

当鼠标点击id为link的元素的时候,就触发了它的onclick事件,然后执行使用了JavaScript定义的fun函数,这样的做法肯定是不合理的,因为触发操作直接写到了HTML结构里,内容和行为没有隔离开。

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

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


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

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

W3C的标准方法是addEventListener,被IE9,chrome,firefox,opera所支持,用法:

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

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

window.attachEvent('onload',function)

上面这两个监听器的作用:监听window对象,如果window对象的load(加载完成)事件被触发,那么就执行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(){}

这样做虽然可以解决在网页内容加载完成之后执行响应的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){
    document.addEventListener('load',fn,false)
  }else if(typeof window.attachEvent != 'undefined'){
    window.attachEvent('load',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。代码如下:

addListener(func)
function func(){}

相关文章

  • 浅谈使用原生JS在页面加载完成之后处理多个函数

    网页中,一般使用JavaScript脚本的运行需要通过事件来触发。一般的做法就是在网页中,直接编写几个函数,有的在...

  • JS延迟加载的几种方式

    JS延迟加载,也就是等页面加载完成之后再加载 JavaScript 文件。 JS延迟加载有助于提高页面加载速度。 ...

  • js延迟加载的六种方式

    js实现延迟加载的几种方法,js的延迟加载有助与提高页面的加载速度 JS延迟加载,也就是等页面加载完成之后再加载 ...

  • 01-JQuery入口函数

    JQuery入口函数 JS原生入口函数特点原生JS会等到DOM元素加载完毕,并且图片也加载完毕才会执行原生的JS如...

  • Vue 2

    钩子函数,表示在页面加载之后就执行代码 mounted 通过控制dom自动获取焦点 在页面加载完成之后执行代码...

  • 共享onload事件函数

    页面加载时同时加载多个函数:

  • jQuery事件详解之$(document).ready()

    在页面加载结束后,浏览器会通过js为dom元素添加事件。原生的js中使用window.onload方法;在JQ中使...

  • 2018-06-22

    wkWebView 的js交互与js交互 /// 5 页面加载完成之后调用 (void)webView:(WKWe...

  • 如何动态加载js?

    如何动态加载js?如何使用js实现多个html页面访问同一个常量?如何不使用框架,只有Html时,动态加载文件? ...

  • requirejs

    requirejs作用 当你运行多个js的时候页面会造成堵塞,如下。 使用requirejs可以异步加载不同的js...

网友评论

      本文标题:浅谈使用原生JS在页面加载完成之后处理多个函数

      本文链接:https://www.haomeiwen.com/subject/gwcmjttx.html