掌握DOM事件

189 阅读3分钟

学会为DOM注册事件 实现简单的可交互的网页特效

事件

首先要明白什么是事件? 其实事件就是我们在编程时系统内发生的动作或者发生的事情; 比如用户在网页上进行鼠标移入或者移出或者单击了某个链接,这都是事件。

事件包含了事件监听, 事件类型, 事件对象, 环境对象等

事件监听

事件监听就是自动让程序去监测是否有事件发生, 一旦监测到, 就立即调用一个函数进行响应, 这个过程也叫绑定事件或者注册事件, 比如鼠标经过可以让轮播图停止等。

语法1:

元素对象.addEventListener('事件类型', 要执行的函数)

语法2:

事件源.on事件 = function() { }

语法2是低版本的写法 缺点是on方式会被覆盖, addEventListener方式可绑定多次, 拥有事件更多特性, 推荐使用。

通过语法我们能够很直观的看到事件监听有三个比较关键的要素。元素对象, 事件类型, 和要执行的函数

  • 元素对象: 即事件源, 通俗来说就是被触发的DOM元素。

  • 事件类型: 通过什么方式触发的?鼠标移入移出等。

  • 要执行的函数: 事件触发后, 相应的回调函数被执行。

事件类型有很多种

鼠标事件: 鼠标触发

鼠标点击: click

鼠标移入: mousenter

鼠标移出: mouseleave

焦点事件: 表单获得光标后触发

获得焦点: focus

失去焦点: blur

键盘事件: 键盘触发

键盘按下: keydown

键盘抬起: keyup

文本事件: 表单输入触发

input: 用户输入事件

事件对象

通俗来说: 当任意一个事件类型被触发时, 与事件相关的信息会以对象的形式被记录下来, 这个对象被称为事件对象。

语法: 元素.addEventListener('click', function (e) {})

事件监听里的回调函数的第一个参数就是事件对象, 通常命名为event、ev、e。

事件对象的常用属性

  <script>
    document.addEventListener('click', function (e) {
      console.log(e.type); // 打印事件类型 click
      console.log(e.clientX); // 基于浏览器的左上角 打印鼠标点击的X坐标 Y坐标同理
      console.log(e.offsetX);  // 基于当前元素的左上角 打印鼠标点击的X坐标 Y坐标同理
    })
  </script>

环境对象this

环境对象this是指函数内部特殊的变量, 它代表着当前函数运行时所处的环境。

通俗来说 this本质上也是一个变量, 其数据类型是对象

在使用时, 我们可以简单采用谁调用, this就是谁的粗略规则。

普通函数里, this指向的是window。

    function fn() {
      console.log(this)
    }
    window.fn()

运行结果: image.png

在如下的点击事件中: 回调函数也是个函数 只要是函数, 里面都有this, 谁调用this指向谁, 而回调函数是button在调用, 所以this指向button这个对象。

<body>
  <button>点击</button>
  <script>
    //每个函数里面都有this 环境对象 
    const btn = document.querySelector('button')
    btn.addEventListener('click', function () {
      console.log(this)  // btn 对象 即button这个对象
      btn.style.color = 'red'
      this.style.color = 'red'
    })
  </script>
</body>

扩展知识: 回调函数

通俗说就是把函数1当做参数传递给函数2, 我们就把函数1称为回调函数。使用匿名函数作为回调函数比较常见。

<script>
  // 开启定时器,匿名函数做为参数
  setInterval(function () {
    console.log('回调函数就是我呀...');
  }, 1000);
</script>

回调函数本质上是函数, 只不过把她当参数使用而已。