原生javascript如何实现共享onload事件


Posted in Javascript onJuly 03, 2020

在工作时,我们给一个元素绑定了事件,如果dom还没加载完成,就执行了js代码,就不会绑定成功。常规解决方案就是用:

window.onload = EventFunction;

可是如果有两个 事件,

  • window.onload = EventFunction1;
  • window.onload = EventFunction2;

那2就会将1取代,这时你可能会想:每个事件处理板书只能绑定一条指令。有一种办法可以让我们避开这一难题:可以先创建一个匿名函数来容纳这两个函数,然后把那个匿名函数绑定到onload事件上,如下所示:

window.onload = function(){
 firstFunction();
 secondFunction(); 
}

它确实能很好地工作————在需要绑定的函数不是很多的场合,这应该是最简单的解决方案了。

这里还有一个弹性最佳的解决方案——不管你打算页面加载完毕时执行多少个函数,它都可以应付自如。这个方案需要额外编写一些代码,把函数绑定到window.onload事件就非常易行了。

这个函数的名字是addLoadEvent,它是由Simon Willison写的。它只有一个参数:打算在页面加载完毕时执行的函数的名字。

下面是此函数要完成的操作:

1.把现有的 window.onload 事件处理函数的值存入变量 oldonload;

2.如果在这个处理函数上还没有绑定任何函数,就像平时那样把新函数添加给它;

3.如果在这个处理函数上已经绑定了一些函数,就把新函数追加到现有指令的末尾。

function addLoadEvent(func) {
    var oldonload = window.onload;
    if(typeof window.onload != 'function'){
      window.onload = func;
    }else{
      window.onload = function(){
        oldonload();
        func();
      }
    }
  }

这将把那些在页面加载完毕时执行的函数创建为一个队列。如果想把刚才那两个函数添加到队列里去,只需要写出以下代码就行了:

addLoadEvent(firstFunction);
addLoadEvent(secondFunction);

我发现这个函数非常实用,尤其是在代码变得越来越复杂的时候。无论打算在页面加载完毕时执行多少个函数,只要定一条语句就可以安排好一切。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery Ajax 全解析
Feb 08 Javascript
JS多物体 任意值 链式 缓冲运动
Aug 10 Javascript
javascript与cookie 的问题详解
Nov 11 Javascript
javascript里绝对用的上的字符分割函数总结
Jul 31 Javascript
JavaScript中利用各种循环进行遍历的方式总结
Nov 10 Javascript
微信小程序 label 组件详解及简单实例
Jan 10 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
Sep 18 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
Nov 08 jQuery
深入浅出webpack之externals的使用
Dec 04 Javascript
js中document.write和document.writeln的区别
Mar 11 Javascript
JQuery判断radio单选框是否选中并获取值的方法
Jan 17 jQuery
基于Vue+Webpack拆分路由文件实现管理
Nov 16 Javascript
Vue如何实现监听组件原生事件
Jul 03 #Javascript
如何在node环境实现“get数据解析”代码实例
Jul 03 #Javascript
JavaScrip如果基于url实现图片下载
Jul 03 #Javascript
基于VUE实现判断设备是PC还是移动端
Jul 03 #Javascript
JavaScript如何判断对象有某属性
Jul 03 #Javascript
详解element-ui动态限定的日期范围选择器代码片段
Jul 03 #Javascript
JS常见错误(Error)及处理方案详解
Jul 02 #Javascript
You might like
如何在PHP中使用Oracle数据库(1)
2006/10/09 PHP
在PHP中使用灵巧的体系结构
2006/10/09 PHP
服务器端解压缩zip的脚本
2006/12/22 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
如何判断php数组的维度
2013/06/10 PHP
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
PHP生成随机密码类分享
2014/06/25 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
jQuery中focus事件用法实例
2014/12/26 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
浅谈es6中的元编程
2020/12/01 Javascript
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
python实现批量改文件名称的方法
2015/05/25 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
局部内部类是否可以访问非final变量?
2013/04/20 面试题
毕业生护理专业个人求职信范文
2014/01/04 职场文书
公证书标准格式
2014/04/10 职场文书
机关党员公开承诺书
2014/08/30 职场文书
2014年协会工作总结
2014/11/22 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
校本研修个人总结
2015/02/28 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android
win10搭建配置ftp服务器的方法
2022/08/05 Servers