原生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 相关文章推荐
玩转方法:call和apply
May 08 Javascript
js实现页面跳转重定向的几种方式
May 29 Javascript
angularjs学习笔记之双向数据绑定
Sep 26 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
Dec 07 Javascript
JavaScript的代码编写格式规范指南
Dec 07 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
Feb 29 Javascript
ES6中非常实用的新特性介绍
Mar 10 Javascript
js中的关联数组与普通数组详解
Jul 27 Javascript
js中document.referrer实现移动端返回上一页
Feb 22 Javascript
node安装--linux下的快速安装教程
Mar 21 Javascript
BootStrap Select清除选中的状态恢复默认状态
Jun 20 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
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
DOTA2 探索永无止境 玩家自创强悍插眼攻略
2020/04/20 DOTA
php下删除一篇文章生成的多个静态页面
2010/08/08 PHP
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
php实现的顺序线性表示例
2019/05/04 PHP
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
浅谈python import引入不同路径下的模块
2017/07/11 Python
Python文件操作基本流程代码实例
2017/12/11 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
Django实现分页显示效果
2019/10/31 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
HTML5中的强制下载属性download使用实例解析
2016/05/12 HTML / CSS
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
个人收入证明范本
2014/01/12 职场文书
事业单位辞职信范文
2014/01/19 职场文书
试用期员工考核制度
2014/01/22 职场文书
企业管理毕业生求职信
2014/03/11 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python