JS-DOM----事件高级


事件监听

  • addEventListener()方法

  • 参数1为具体的事件

  • 参数2为事件触发后的函数

语法:

元素.addEventListener('click(具体的事件)',function(e) {
	// 事件触发后处理的函数代码
})

解绑事件

  1. 传统方式解绑事件
元素.onclick = null;
  1. 方法监听解绑事件的方式
元素.removeEventListener('具体的事件',绑定事件时的回调函数名)

解绑事件的代码示例:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button class="btn1">按钮1</button>
    <button class="btn2">解绑事件</button>
    <script>
        let btn = document.querySelector('.btn1');
        let btn2 = document.querySelector('.btn2');
        var onclickFunc = function(e) {
            console.log(e);

            alert('被点击')
        }
        var aaa = btn.addEventListener('click', onclickFunc);
        btn2.addEventListener('click', function() {
            btn.removeEventListener('click', onclickFunc)
        })
    </script>

</body>

</html>

在这里插入图片描述


事件冒泡

当子盒子和父盒子都添加了点击事件,点击子盒子的时候会触发父盒子的点击事件,这就叫做事件冒泡

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .father {
            width: 100px;
            height: 100px;
            background-color: aquamarine;
            margin: 0 auto;
            overflow: hidden;
        }
        
        .son {
            width: 50px;
            height: 50px;
            background-color: blueviolet;
            margin: 25px auto;
        }
    </style>
</head>

<body>
    <div class="father">
        <div class="son"></div>
    </div>
    <script>
        let boxFather = document.querySelector('.father');
        let boxSon = document.querySelector('.son');
        boxFather.onclick = function() {
            console.log('父盒子被点击');

        }
        boxSon.onclick = function() {
            console.log('子盒子被点击');

        }
    </script>

</body>

</html>

在这里插入图片描述


事件对象

什么是事件对象?

  • 事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是事件对象。

  • 谁绑定了这个事件。

  • 鼠标触发事件的话,会得到鼠标的相关信息,如鼠标位置。

  • 键盘触发事件的话,会得到键盘的相关信息,如按了哪个键。

在这里插入图片描述
事件对象的e.target 和 this的区别:

  • 当在没有事件冒泡的时候,e.target 和 this 没有区别 完全一样
  • 当有了冒泡事件,this指向的是绑定事件的元素,而e.target 指向的是被点击的元素

在这里插入图片描述


阻止事件冒泡

语法:

给父盒子添加

事件对象.stopPropagation();

事件委托

巧妙使用事件冒泡
事件委托也称为事件代理,在 jQuery 里面称为事件委派。

说白了就是,不给子元素注册事件,给父元素注册事件,把处理代码在父元素的事件中执行。


版权声明:本文为bjsyc123456原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。