前端开发中常见的事件高级

111 阅读2分钟

今天我们来了解我们的前端开发中,高级事件中必须要了解的三个内容

事件对象

含义:也是个对象,这个对象里有事件触发时的相关信息

事件对象在事件绑定的回调函数的第一个参数就是事件对象,e.target--就是事件的元素对象

按键事件常用属性

e.key

keyup 和 keydown

e.which--键码

单击事件常见属性

e.clientX/e.clientY --单击位置参照视口的坐标值
e.offsetX/e.offsetY --鼠标单击位置参照元素左上角的坐标值
e.screenX/e.screenY --鼠标单击位置参照屏幕左上角的坐标值

事件流

事件流指的是事件完整执行过程中的流动路径

事件捕获

  • 从DOM的根元素开始去执行对应的事件

  • 从外到内捕获子元素

    • 1、子元素是否在父元素的范围之内
    • 2、子元素里面是否还有更小的子元素,寻找到最小的一个没有更小的子元素为止
  • 捕获是一定会有的

事件冒泡

  • 当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中依次被触发。

  • 事件冒泡的必要性 如果没有冒泡.给大盒子注册点击事件, 点击的是里面的小盒子,会导致大盒子的点击无法执行

  • 从内到外冒泡到父元素

    • 跟事件捕获的方向顺序相反
  • 事件冒泡是默认存在

阻止事件流动==阻止冒泡

  • 语法:事件对象.stopPropagation()

  • 目的是为了冒泡模式下,把事件限制在当前元素即可,不影响到父元素

  • 此方法可以阻断事件流动传播,不光在冒泡阶段有效,捕获阶段也有效

  • 如果判断需要添加阻止冒泡?然后该怎么做?

  1. 先要明确那一块区域不能冒泡
  2. 需要阻止什么事件传递就给这块区域的最大盒子注册该事件
  3. 在事件处理函数里面接受事件对象, 并添加上e.stopPropagation()

阻止默认行为

  • event.perventDefault()
  • 比如链接点击不跳转,表单域的不提交

事件委托

事件委托是利用事件流的特征解决一些开发需求的知识技巧。

原理

  • 利用事件冒泡的特点, 给父元素添加事件,子元素可以触发

优点

  • 给父级元素加事件(可以提高性能)

我们怎么实现?

  • 事件对象.target (e.target)可以获得真正触发事件的元素

XMind - Trial Version