JS通过DOM处理事件

事件是编程中的关键概念,用于响应用户或系统的特定行为。addEventListener用于添加事件监听,例如当用户点击按钮时调用函数。事件类型包括点击、双击等,事件处理程序定义了事件触发后的动作,如改变元素样式。此外,文章还介绍了鼠标事件(如mouseenter,mouseleave)、键盘事件(keydown,keyup)、焦点事件(focus,blur)以及事件对象中包含的信息。

事件

事件是编程语言中的术语,它是用来描述程序的行为或状态的,一旦行为或状态发生改变,便立即调用一个函数。
例如:用户使用 【鼠标点击】 网页中的一个按钮、用户使用【鼠标拖拽】网页中的一张图片

事件监听

结合DOM使用事件时,需要为DOM对象添加事件监听,等待事件发生(触发)时,便立即调用一个函数。
addEventListener是DOM对象专门用来添加事件监听的方法,它的两个参数分别为【事件类型】和【事件回调】。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>事件监听</title>
</head>
<body>
  <h3>事件监听</h3>
  <p id="text">为 DOM 元素添加事件监听,等待事件发生,便立即执行一个函数。</p>
  <button id="btn">点击改变文字颜色</button>
  <script>
    // 1. 获取 button 对应的 DOM 对象
    const btn = document.querySelector('#btn')

    // 2. 添加事件监听
    btn.addEventListener('click', function () {
      console.log('等待事件被触发...')
      // 改变 p 标签的文字颜色
      let text = document.getElementById('text')
      text.style.color = 'red'
    })

    // 3. 只要用户点击了按钮,事件便触发了!!!
  </script>
</body>
</html>

完成事件监听分成3个步骤:

  1. 获取DOM元素
  2. 通过addEventListener方法为DOM节点添加事件监听
  3. 等待事件触发,如用户点击了某个按钮时便会触发click事件类型
  4. 事件触发后,相对应的回调函数会被执行

用大白话描述:就是所谓的事件无非就是找个机会(事件触发)调用一个函数(回调函数)。

事件类型

click译成中文是【点击】的意思,它的含义就是监听(等着)用户鼠标的点击操作,除了【单机】还有【双击】dblclick

<script>
  // 双击事件类型
  btn.addEventListener('dblclick', function () {
    console.log('等待事件被触发...');
    // 改变 p 标签的文字颜色
    const text = document.querySelector('.text')
    text.style.color = 'red'
  })

  // 只要用户双击击了按钮,事件便触发了!!!
</script>

结论:【事件类型】决定了事件被触发的方式,如click代表鼠标单击,dblclick代表鼠标双击。

事件处理程序

addEventListener的第2个参数是函数,这个函数会在事件被触发时被调用,在这个函数中可以编写任意逻辑代码,如改变DOM文本颜色、文本内容等。

<script>
  // 双击事件类型
  btn.addEventListener('dblclick', function () {
    console.log('等待事件被触发...')
    
    const text = document.querySelector('.text')
    // 改变 p 标签的文字颜色
    text.style.color = 'red'
    // 改变 p 标签的文本内容
    text.style.fontSize = '20px'
  })
</script>

结论:【事件处理程序】决定了事件触发后应该执行的逻辑。

事件类型

将众多的事件类型分类可分为:鼠标事件、键盘事件、表单事件、焦点事件等。

鼠标事件

鼠标事件是指鼠标操作相关的事件,如:单击、双击、移动等。

  1. mouseenter监听鼠标是否移入DOM元素
<body>
  <h3>鼠标事件</h3>
  <p>监听与鼠标相关的操作</p>
  <hr>
  <div class="box"></div>
  <script>
    // 需要事件监听的 DOM 元素
    const box = document.querySelector('.box');

    // 监听鼠标是移入当前 DOM 元素
    box.addEventListener('mouseenter', function () {
      // 修改文本内容
      this.innerText = '鼠标移入了...';
      // 修改光标的风格
      this.style.cursor = 'move';
    })
  </script>
</body>
  1. mouseleave监听鼠标是否移除DOM元素
<body>
  <h3>鼠标事件</h3>
  <p>监听与鼠标相关的操作</p>
  <hr>
  <div class="box"></div>
  <script>
    // 需要事件监听的 DOM 元素
    const box = document.querySelector('.box');

    // 监听鼠标是移出当前 DOM 元素
    box.addEventListener('mouseleave', function () {
      // 修改文本内容
      this.innerText = '鼠标移出了...';
    })
  </script>
</body>

键盘事件

keydown键盘按下触发
keyup键盘抬起触发

<body>
    <input type="text">
    <script>
        const input = document.querySelector('input')
        // 键盘按下触发
        input.addEventListener('keydown', function() {
            console.log('键盘按下了');
        })
        // 键盘弹起触发
        input.addEventListener('keyup', function() {
            console.log('键盘弹起了');
        })
    </script>
</body>

焦点事件

focus获得焦点
blur失去焦点

<body>
    <input type="text">
    <script>
        const input = document.querySelector('input')
        // 获得输入框焦点
        input.addEventListener('focus', function() {
            console.log('有焦点触发')
        })
        // 失去输入框焦点
        input.addEventListener('blur', function() {
            console.log('失去焦点触发')
        })
    </script>
</body>

文本框输入事件

input

<body>
    <input type="text">
    <script>
        // 当value发生变化时,input便会触发
        input.addEventListener('input', function() {
            console.log(input.value); // 打印出来输入的值
        })
    </script>
</body>

事件对象

任意事件类型被触发时与事件相关的信息会被以对象的新式记录下来,我们称这个对象为事件对象。

<body>
  <h3>事件对象</h3>
  <p>任意事件类型被触发时与事件相关的信息会被以对象的形式记录下来,我们称这个对象为事件对象。</p>
  <hr>
  <div class="box"></div>
  <script>
    // 获取 .box 元素
    const box = document.querySelector('.box')

    // 添加事件监听
    box.addEventListener('click', function (e) {
      console.log('任意事件类型被触发后,相关信息会以对象形式被记录下来...');

      // 事件回调函数的第1个参数即所谓的事件对象
      console.log(e)
    })
  </script>
</body>

事件回调函数的【第1个参数】即所谓的事件对象,通常习惯性的将这个对数命名为eventevev
接下来简单看一下事件对象中包含了那些有用的信息:

  1. ev.type当前事件的类型
  2. ev.clientX/Y光标相对浏览器窗口的位置
  3. ev.offsetX/Y光标相于当前DOM元素的位置

注:在事件回调函数内部通过window.event同样可以获取事件对象

回调函数

如果将函数 A 作为参数传递给函数 B 时,我们称函数 A 为回调函数。

<script>
  // 声明 foo 函数
  function foo(arg) {
    console.log(arg);
  }

  // 普通的值做为参数
  foo(10);
  foo('hello world!');
  foo(['html', 'css', 'javascript']);

  function bar() {
    console.log('函数也能当参数...');
  }
  // 函数也可以做为参数!!!!
  foo(bar);
</script>

函数bar做参数传给了foo函数,bar就是所谓的回调函数了!!!
接下来看间歇函数setInterval

<script>
	function fn() {
    console.log('我是回调函数...');
  }
  // 调用定时器
  setInterval(fn, 1000);
</script>

fn函数作为参数传给了setInterval,这便是回调函数的实际应用了,结合刚刚学习的函数表达式上述代码还有另一种常见写法。

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

结论:

  1. 回调函数本质还是函数,只不过把它当成参数使用。
  2. 使用匿名函数作为回调函数比较常见
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值