JS中自定义事件的使用与触发操作实例分析


Posted in Javascript onNovember 01, 2019

本文实例讲述了JS中自定义事件的使用与触发操作。分享给大家供大家参考,具体如下:

1. 事件的创建

JS中,最简单的创建事件方法,是使用Event构造器:

var myEvent = new Event('event_name');

但是为了能够传递数据,就需要使用 CustomEvent 构造器:

var myEvent = new CustomEvent('event_name', {
 detail:{
  // 将需要传递的数据写在detail中,以便在EventListener中获取
  // 数据将会在event.detail中得到
 },
});

2. 事件的监听

JS的EventListener是根据事件的名称来进行监听的,比如我们在上文中已经创建了一个名称为‘event_name' 的事件,那么当某个元素需要监听它的时候,就需要创建相应的监听器:

//假设listener注册在window对象上
window.addEventListener('event_name', function(event){
 // 如果是CustomEvent,传入的数据在event.detail中
 console.log('得到数据为:', event.detail);

 // ...后续相关操作
});

至此,window对象上就有了对‘event_name' 这个事件的监听器,当window上触发这个事件的时候,相关的callback就会执行。

3. 事件的触发

对于一些内置(built-in)的事件,通常都是有一些操作去做触发,比如鼠标单击对应MouseEvent的click事件,利用鼠标(ctrl+滚轮上下)去放大缩小页面对应WheelEvent的resize事件。
然而,自定义的事件由于不是JS内置的事件,所以我们需要在JS代码中去显式地触发它。方法是使用 dispatchEvent 去触发(IE8低版本兼容,使用fireEvent):

// 首先需要提前定义好事件,并且注册相关的EventListener
var myEvent = new CustomEvent('event_name', { 
 detail: { title: 'This is title!'},
});
window.addEventListener('event_name', function(event){
 console.log('得到标题为:', event.detail.title);
});
// 随后在对应的元素上触发该事件
if(window.dispatchEvent) { 
 window.dispatchEvent(myEvent);
} else {
 window.fireEvent(myEvent);
}
// 根据listener中的callback函数定义,应当会在console中输出 "得到标题为: This is title!"

需要特别注意的是,当一个事件触发的时候,如果相应的element及其上级元素没有对应的EventListener,就不会有任何回调操作。

对于子元素的监听,可以对父元素添加事件托管,让事件在事件冒泡阶段被监听器捕获并执行。这时候,使用event.target就可以获取到具体触发事件的元素。

PS:这里再为大家附上javascript系统自带事件参考表供大家参考查询:

javascript事件与功能说明大全:
http://tools.3water.com/table/javascript_event

更多关于JavaScript相关内容可查看本站专题:《JavaScript事件相关操作与技巧大全》、《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript 进度条 实现代码
Jul 30 Javascript
js 获取中文拼音,Select自动匹配字母获取值的代码
Sep 23 Javascript
解析JavaScript中的标签语句
Jun 19 Javascript
jquery实现图片滚动效果的简单实例
Nov 23 Javascript
Javascript基础教程之while语句
Jan 18 Javascript
使用AngularJS实现可伸缩的页面切换的方法
Jun 19 Javascript
js canvas实现擦除效果示例代码
Apr 26 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
Feb 10 Javascript
js实现动态改变radio状态的方法
Feb 28 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
Jun 03 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
Mar 09 Javascript
Vue OpenLayer 为地图绘制风场效果
Apr 24 Vue.js
vue设置动态请求地址的例子
Nov 01 #Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
Nov 01 #Javascript
js实现旋转的星空效果
Nov 01 #Javascript
浅谈小程序globalData的那些事儿
Nov 01 #Javascript
小程序怎样让wx.navigateBack更好用的方法实现
Nov 01 #Javascript
vue实现配置全局访问路径头(axios)
Nov 01 #Javascript
vue.js路由mode配置之去掉url上默认的#方法
Nov 01 #Javascript
You might like
PHP的FTP学习(三)
2006/10/09 PHP
PHP的面试题集
2006/11/19 PHP
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
学习雷锋精神演讲稿
2014/05/10 职场文书
工作失职检讨书(精华篇)
2014/10/15 职场文书
整改落实自查报告
2014/11/05 职场文书
计划生育个人总结
2015/03/02 职场文书
小学教师求职信范文
2015/03/20 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis