DOM事件类
1. DOM事件级别
DOM0级事件
DOM0 级时间分两种,一是直接在标签内添加执行语句,二是定义执行函数。
<input type="text" id="firstTest">
<input type="button" value="button" onclick="alert(document.getElementById('firstTest').value)">
<script>
document.getElementById('button').onclick=function(){
alert(document.getElementById('firstTest').value);
}
</script>
DOM2 级事件
第一个参数:事件名称
第二个参数:执行函数
第三个参数:指定冒泡还是捕获,默认是false,冒泡。
element.addEventListener('click',function(){},false)
DOM3 级事件
同DOM2级一样,但添加了更多的事件类型,诸如鼠标事件、键盘事件等。
element.addEventListener('keyup',function(){},false)
2. DOM事件类型
- 事件类型分两种:事件捕获、事件冒泡。
- 事件捕获就是由上往下,从事件发生的顶点开始,逐级往下查找,一直到目标元素。
- 事件冒泡就是由下往上,从具体的目标节点元素触发,逐级向上传递,直到根节点。具体过程参考下图理解:
3. DOM事件流
事件流简单说就是,浏览器在当前页面与用户交互过程中时间的传递过程。DOM完整的事件流包括三个阶段:事件捕获阶段、目标阶段和事件冒泡阶段。事件通过捕获到达目标元素,这个时候就是目标阶段。从目标节点元素将事件上传到根节点的过程就是第三个阶段,冒泡阶段。
4. 描述DOM 事件捕获的具体流程
重点注意,第一个接收到事件的对象是window对象。之后才是document对象。
<div id="dom">目标元素</div>
<script type="text/javascript">
var dom = document.getElementById('dom');
dom.addEventListener('click', function (e) {
console.log('this div');
}, true);
window.addEventListener('click', function (e) {
console.log('this window');
}, true);
document.addEventListener('click', function (e{
console.log('this document');
}, true);
document.documentElement.addEventListener('click', function (e) {
console.log('this html');
}, true);
document.body.addEventListener('click',function (e) {
console.log('this body');
}, true);
</script>
5. Event对象的常见应用
Event 对象的方法有很多,推荐这篇较详细的文章参考,javaScript事件(四)event的公共成员(属性和方法),这里介绍几种代表性的。
- event.preventDefault() //阻止标签的默认行为,比如说 a 标签, 可以阻止它的默认跳转行为。
- event.stopPropagation() //阻止冒泡。有些情况就不需要冒泡时间,比如说,父子元素分别绑定事件,如果不给子元素设置阻止冒泡,那么在子元素响应事件时,父元素也会响应这个事件,这时候就需要阻止冒泡。
- event.stopImmediatePropagation() //设置事件响应优先级,同一个元素绑定了两个事件的话,在需要设定执行顺序是就需要这个方法。
- event.currentTarget //返回绑定事件的元素
- event.target //返回触发事件的元素
6. 自定义事件
这里介绍比较简单,具体详细自定义事件相关知识可以自行搜索了解。
var eve = new Event('test'); //通过new Event 创建事件
dom.addEventListener('test', function () { //注册事件
console.log('test dispatch');
});
setTimeout(function () {
dom.dispatchEvent(eve); //触发事件
}, 1000);
除了通过上述方式,还可以通过 customEvent()进行自定义事件设置。 除了事件名之外,尾部还可以添加一个Object参数。 用法与上一种方法相同。
原文:https://blog.csdn.net/m0_37585915/article/details/78505979