DOM事件类知识浅层介绍

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事件类型

  • 事件类型分两种:事件捕获、事件冒泡。
  • 事件捕获就是由上往下,从事件发生的顶点开始,逐级往下查找,一直到目标元素。
  • 事件冒泡就是由下往上,从具体的目标节点元素触发,逐级向上传递,直到根节点。具体过程参考下图理解:
    DOM事件类知识浅层介绍_第1张图片

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>
        

DOM事件类知识浅层介绍_第2张图片

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

你可能感兴趣的:(前端,JS)