JS 事件绑定监听、事件委托 详解

本文详细介绍了事件监听的绑定、移除及事件阶段,并通过实例解释了如何利用事件委托提高JavaScript性能,减少内存使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事件绑定

事件监听绑定的应用场景

// 获取元素
    var wrap = document.getElementsByClassName("wrap")[0]
    wrap.onclick = function() {
      console.log(1);
    }
    wrap.onclick = function() {
      console.log(2);
    }
     //  当鼠标点击div时候 程序只会执行后面一个 使用事件绑定就能解决这个问题

格式: element.addEventListener(event, function, useCapture)
type:事件名,支持所有 DOM事件
function:函数名
useCapture:指定事件是否在捕获或冒泡阶段执行。true,捕获。false,冒泡。默认false

代码举例:

// 获取元素
    var wrap = document.getElementsByClassName("wrap")[0]
    wrap.addEventListener("click", fun1)
    wrap.addEventListener("click", fun2)

    function fun1() {
      console.log(1);
    }

    function fun2() {
      console.log(2);
    }
    // 两个点击事件都会执行

事件绑定移出

格式:document.removeEventListener(“event”, function);

wrap.removeEventListener("click", fun1);
// 解除了fun1的点击事件 fun2的正常执行

事件监听事件阶段

w3c 规定了 事件监听的三个阶段 分别是:捕获阶段、目标阶段、冒泡阶段。
捕获阶段:事件从根节点流向目标节点 在流向目标节点时捕获全部事件 直至目标节点
目标阶段 :事件会在目标节点上触发
冒泡阶段:目标节点触发后 向上冒泡 最终回到根节点

这里写图片描述

代码举例:

    var big = document.getElementsByClassName("big")[0]
    var middle = document.getElementsByClassName("middle")[0]
    var small = document.getElementsByClassName("small")[0]
    big.addEventListener("click", fun1)
    middle.addEventListener("click", fun2)
    small.addEventListener("click", fun3)
    function fun1() {
      console.log("big");
    }
    function fun2() {
      console.log("middle");
    }
    function fun3() {
      console.log("small");
    }
    // 三个div依次从大到小叠加 点击最上层 依次打印出 small middle  big
    // 如果在addEventListener 将默认的useCapture = false 改为true 点击最上层 依次打印出 big middle  small

事件委托

事件委托主要是用来提高JavaScript性能 减少内存使用

代码举例:

var big = document.getElementsByClassName("big")[0]
    var middle = document.getElementsByClassName("middle")[0]
    var small = document.getElementsByClassName("small")[0]
    document.addEventListener("click", function(ev) {
      var target = ev.target
      if (target == big) {
        console.log("big");
      } else if (target == middle) {
        console.log("middle");
      } else if (target == small) {
        console.log("small");
      }
    })
    // 点击div 输出相应标签名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值