原生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 相关文章推荐
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
Aug 04 Javascript
判断用户是否在线的代码
Mar 05 Javascript
js 固定悬浮效果实现思路代码
Aug 02 Javascript
js面向对象编程之如何实现方法重载
Jul 02 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
Aug 15 Javascript
jQuery中:empty选择器用法实例
Dec 30 Javascript
js中this的用法实例分析
Jan 10 Javascript
js ajaxfileupload.js上传报错的解决方法
May 05 Javascript
js获取隐藏元素宽高的实现方法
May 19 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
May 24 Javascript
Node.js dgram模块实现UDP通信示例代码
Sep 26 Javascript
vue下canvas裁剪图片实例讲解
Apr 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
phpMyadmin 用户权限中英对照
2010/04/02 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
2014/04/18 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
yii数据库的查询方法
2015/12/28 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
Nodejs+express+html5 实现拖拽上传
2014/08/08 NodeJs
JavaScript中继承用法实例分析
2015/05/16 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
Python创建xml文件示例
2017/03/22 Python
python实现泊松图像融合
2018/07/26 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
实例讲解利用HTML5 Canvas API操作图形旋转的方法
2016/03/22 HTML / CSS
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
英国森林假期:Forest Holidays
2021/01/01 全球购物
成人教育自我鉴定
2013/11/01 职场文书
求职自我推荐信
2015/03/24 职场文书
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS