原生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 相关文章推荐
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
Dec 11 Javascript
实例说明为什么不要行内使用javascript
Apr 18 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
Sep 15 Javascript
AngularJS 过滤器的简单实例
Jul 27 Javascript
详解Js模板引擎(TrimPath)
Nov 22 Javascript
纯js实现倒计时功能
Jan 06 Javascript
详解vue+vueRouter+webpack的简单实例
Jun 17 Javascript
vue实现组件之间传值功能示例
Jul 13 Javascript
vue中设置height:100%无效的问题及解决方法
Jul 27 Javascript
NProgress显示顶部进度条效果及使用详解
Sep 21 Javascript
vue-父子组件和ref实例详解
Nov 10 Javascript
js 动态校验开始结束时间的实现代码
May 25 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
PHP开发的一些注意点总结
2010/10/12 PHP
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
php实现简单文件下载的方法
2015/01/30 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
JS 的应用开发初探(mootools)
2009/12/19 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
JavaScript中常见获取元素的方法汇总
2015/03/04 Javascript
JS+CSS实现带有碰撞缓冲效果的竖向导航条代码
2015/09/15 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
JS 验证码功能的三种实现方式
2018/11/26 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
Python实现全局变量的两个解决方法
2014/07/03 Python
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
使用jTopo给Html5 Canva中绘制的元素添加鼠标事件
2014/05/15 HTML / CSS
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
业务经理的岗位职责
2013/11/16 职场文书
借款民事起诉状范文
2015/05/19 职场文书
美元符号 $
2022/02/17 杂记
Java无向树分析 实现最小高度树
2022/04/09 Javascript