原生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 相关文章推荐
js实现按Ctrl+Enter发送效果
Sep 18 Javascript
jQuery对val和atrr("value")赋值的区别介绍
Sep 26 Javascript
js判断浏览器版本以及浏览器内核的方法
Jan 20 Javascript
jQuery实现的淡入淡出二级菜单效果代码
Sep 15 Javascript
jquery实现图片预加载
Dec 25 Javascript
概述BootStrap中role="form"及role作用角色
Dec 08 Javascript
jQuery实现两个select控件的互移操作
Dec 22 Javascript
js时间戳和c#时间戳互转方法(推荐)
Feb 15 Javascript
jQuery时间验证和转换为标准格式的时间格式
Mar 06 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
May 10 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
Mar 07 Javascript
在Vue项目中使用d3.js的实例代码
May 01 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
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
php计算两个坐标(经度,纬度)之间距离的方法
2015/04/17 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
json中换行符的处理方法示例介绍
2014/06/10 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
js实现聊天对话框
2020/02/08 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
Python实现从url中提取域名的几种方法
2014/09/26 Python
python print出共轭复数的方法详解
2019/06/25 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
python实现取余操作的简单实例
2020/08/16 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
项目专员岗位职责
2013/12/04 职场文书
前台接待员岗位职责
2014/01/02 职场文书
银行竞聘报告范文
2014/11/06 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript