说说 JavaScript 事件流之模拟事件
来源:互联网 发布:淘宝双11是什么意思 编辑:程序博客网 时间:2024/05/22 14:56
使用 JavaScript 可以在任意时刻触发特定的事件,可以这些事件就跟正常事件一样会冒泡。模拟事件技术,一般用于测试 web 应用程序。DOM2 级规范规定了模拟特定事件的方式,IE9、Opera、Firefox、Chrome 和 Safari 都支持。
在 document 对象上调用 createEvent() 方法来创建 event 对象。它接收一个参数,表示要创建的事件类型字符串。在 DOM2 级规范中,事件类型字符串是英文复数形式,DOM3 级中都变成了单数!
事件类型字符串列表:
注意,在 DOM3 级事件中才规定了键盘事件!
创建了 event 对象后,还需要使用与事件有关的信息对其初始化。
模拟事件的最后一步就是触发事件(dispatchEvent()),触发事件后,这个事件就是官方版本的事件咯,它可以冒泡并引发相应事件处理程序的执行。
1 模拟鼠标事件
为 createEvent() 传入 “MouseEvents”,它会返回一个对象,这个对象包含 initMouseEvent() 方法,这个方法接收下面 15 个参数:
initMouseEvent() 的参数是与鼠标事件的 event 对象所包含的属性一一对应的!前 4 个参数对于正确激发事件很重要;其他参数只在事件处理程序中才会用到。把 event 对象传给 dispatchEvent() 时,这个对象的 target 会自动被设置。现在我们来模拟鼠标单击事件:
<input type="button" value="Click Me" id="myBtn"><script type="text/javascript" src="EventUtil.js"></script><script type="text/javascript"> var btn = document.getElementById("myBtn"); EventUtil.addHandler(btn, "click", function (event) { console.log("点过咯"); }); //创建事件对象 var event = document.createEvent("MouseEvents"); //初始化事件对象 event.initMouseEvent("click", true, true, document.defaultView, 0, 0, 0, 0, 0, false, false, false, false, 0, null); //触发事件 btn.dispatchEvent(event);</script>
兼容 DOM 的浏览器,也可以通过类似的方式来模拟其他鼠标事件,比如 dblclick。
2 自定义 DOM 事件
DOM3 级定义了“ 自定义 DOM 事件”,利用它,可以让开发人员创建自己的事件。调用 createEvent(“CustomEvent”),返回的对象包含 initCustomEvent() 方法,它接受 4 个参数:
<div id="myDiv"></div><script type="text/javascript" src="EventUtil.js"></script><script type="text/javascript"> var div = document.getElementById("myDiv"),event; EventUtil.addHandler(div,"myevent", function (event) { console.log("div:"+event.detail); }); EventUtil.addHandler(document,"myevent", function (event) { console.log("document:"+event.detail); }); if(document.implementation.hasFeature("CustomEvents","3.0")){ event=document.createEvent("CustomEvent"); event.initCustomEvent("myevent",true,false,"Hello world!"); div.dispatchEvent(event); }</script>
IE9+ 、 Firefox 6+ 和 chrome 支持自定义 DOM 事件。
- 说说 JavaScript 事件流之模拟事件
- 说说 JavaScript 的事件流
- 说说 JavaScript 事件流之事件类型(包含 DOM2、DOM3 级事件)
- JavaScript之模拟事件(事件)
- 说说 JavaScript 的事件对象
- Javascript事件模拟(鼠标事件、键盘事件)
- JavaScript之事件流
- JavaScript之事件流
- JavaScript之事件流
- Javascript事件模拟
- JavaScript 模拟事件触发
- Javascript事件模拟
- 浅谈Javascript事件模拟
- JavaScript模拟鼠标事件
- javascript模拟原生事件
- JavaScript:模拟事件
- 说说 JavaScript 事件流之内存和性能
- 说说 JavaScript 的事件处理程序
- 【Android 多媒体应用】使用MediaCodec解码使用AudioTrack播放音频数据
- Hadoop系列-MapReduce设计思想与原理机制(九)
- 0001+1=0002
- Hdu1796 How many integers can you find
- map的详细用法
- 说说 JavaScript 事件流之模拟事件
- Sql语句优化总结
- DE(差分进化)优化算法MATLAB源码详细中文注解
- Redis Cluster 简介与部署
- 【jQuery源码浅析】(二)--jQuery的构造--$()
- jsp三大指令
- Android 4.2 InCallScreen UI浅析
- 面试题42:翻转单词顺序VS左旋转字符串
- 用pip安装Python的numpy、scipy等数据分析类扩展库