原生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的loading 加载提示效果实现代码
Sep 01 Javascript
jQuery.each()用法分享
Jul 31 Javascript
利用JS实现浏览器的title闪烁
Jul 08 Javascript
js jquery获取随机生成id的服务器控件的三种方法
Jul 11 Javascript
javascript实现下拉提示选择框
Dec 29 Javascript
js 颜色选择插件
Jan 23 Javascript
js实现一个猜数字游戏
Mar 31 Javascript
详解webpack+gulp实现自动构建部署
Jun 29 Javascript
移动端触摸滑动插件swiper使用方法详解
Aug 11 Javascript
基于express中路由规则及获取请求参数的方法
Mar 12 Javascript
JS实现小星星特效
Dec 24 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
Mar 01 jQuery
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
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php数据库备份还原类分享
2014/03/20 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
2016/01/25 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
如何封装Vue Element的table表格组件
2021/02/06 Vue.js
[01:13]这,就是刀塔
2014/07/16 DOTA
Python函数式编程
2017/07/20 Python
Python处理CSV与List的转换方法
2018/04/19 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
eBay美国官网:eBay.com
2020/10/24 全球购物
会计毕业生求职简历的自我评价
2013/10/20 职场文书
教师简历自我评价
2014/02/03 职场文书
预备党员承诺书
2014/03/25 职场文书
2014年仓库保管员工作总结
2014/12/03 职场文书
2016中秋节问候语
2015/11/11 职场文书
2019年大学推荐信
2019/06/24 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL