js基础之(2)-事件与addEventListener

本文详细介绍了HTML事件,包括用户点击、页面加载等常见事件,并重点讲解了`addEventListener`方法的使用,如添加事件句柄、传递参数、事件冒泡与捕获。同时,通过实例展示了事件传递的两种方式:冒泡和捕获,帮助读者深入理解事件处理机制。
摘要由CSDN通过智能技术生成

一、HTML 事件

HTML事件的例子:

  • 当用户点击鼠标时
  • 当网页已加载时
  • 当图像已加载时
  • 当鼠标移动到元素上时
  • 当输入字段被改变时
  • 当提交 HTML 表单时
  • 当用户触发按键时

二、addEventListener()

addEventListener("事件名称", "事件触发时调用的函数", 事件传递机制是否为冒泡)

参数一:事件名称;如:click;注意事件名称不要加“on”。
参数二:事件触发时调用的函数;
参数三:类型为布尔值;用于描述事件传递机制是否为冒泡;默认值为false,代表传递机制为 “冒泡”。

用于向HTML元素添加事件句柄;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" type="text/css" href="mystyle.css">
    <title>dom EventListener</title>
</head>
<body>
    <div>

        <div>
            <h2>addEventListener()方法</h2>
            <p>addEventListener()方法用于向指定元素添加事件句柄</p>
        </div>

        <div>
            <h2>语法</h2>
            <p>element.addEventListener( event, function, useCapture); </p>
            <p>第一个参数:事件的类型(如“click”或“mousedown”),不要使用on前缀,例如“click”而不是“onclick”</p>
            <p>第二个参数:事件触发后调用的函数</p>
            <p>第三个参数:事件触发后十冒泡还是捕获。该参数可选</p>
        </div>

        <div>
            <h2>向原元素添加事件句柄</h2>
            <button id="myBtn1">点我</button>
            <p>使用函数名,来引用外部函数;</p>
        </div>

        <div>
            <h2>向同一个元素中添加多个不同类型事件句柄</h2>
            <button id="myBtn2">点我</button>
            <p id="demo2">pending</p>
            
        </div>

        <div>
            <h2>向 Window 对象添加事件句柄</h2>
            <p>HTML DOM 对象如: HTML元素、HTML文档、window对象。或者其他支持的事件对象如:xmlHttpRequest</p>
            <p>实例在 window 对象中使用 addEventListener() 方法。</p>
            <p>尝试重置浏览器的窗口触发 “resize” 事件句柄</p>
            <p id="demo3"></p>
        </div>

        <div>
            <h2>传递参数</h2>
            <p>当传递参数时,使用“匿名函数”调用带参数的函数</p>
            <button id="myBtn4">点我</button>
            <p id="demo4"></p>
        </div>

        <div>
            <h2>事件冒泡或事件捕获</h2> 
            <p>事件传递的方式有两种方式:冒泡与捕获</p>
            <p>实例演示了在添加不同事件监听时,冒泡与捕获的不同</p>
            <p>在 “冒泡” 中,内部元素的事件会先被触发,然后再触发外部元素 </p>
            <p>在 “捕获” 中,外部元素的事件会先被触发,然后再触发内部元素 </p>
            <p>addEventListener()方法中第三个参数,默认值为false,表示事件传递机制为 “冒泡”</p>

            <div class="mydivstyle" id="myDiv1">
                <p id="myP1">点击段落, 我是冒泡</p>
            </div>    <br/>

            <div class="mydivstyle" id="myDiv2">
                <p id="myP2">点击段落,我是捕获</p>
            </div>
        </div>

        
        

    </div>

    <script>

        function myFunction1() {
            var x = document.getElementById("myBtn1");
            x.addEventListener("click", function(){
                alert("Hello, World");
            });
            // 第二个参数可以使用函数名,来引用外部函数
            x.addEventListener("click", theAlertFunction);

            
        }

        myFunction1();

        function theAlertFunction() {
            alert("Hello this is alert;");
        }

        function myFunction2() {
            let x = document.getElementById("myBtn2");
            x.addEventListener("mouseover", theMouseroverFunction);
            x.addEventListener("click", theClickFunction);
            x.addEventListener("mouseout", theMouseOutFunction);
        }

        function theMouseroverFunction() {
            document.getElementById("demo2").innerHTML += "Moused Over! <br/>";
        }

        function theClickFunction() {
            document.getElementById("demo2").innerHTML = "";
        }

        function theMouseOutFunction() {
            document.getElementById("demo2").innerHTML += "Moused Out! <br/>";
        }

        myFunction2();

        // window 对象添加事件句柄
        function myFunction3() {
            window.addEventListener("resize", function(){
                document.getElementById("demo3").innerHTML = Math.random();
            });
        }

        myFunction3();


        // 当传递参数时,使用“匿名函数”调用带参数的函数
        function myFunction4() {
            let p1 = 5;
            let p2 = 7;
            document.getElementById("myBtn4").addEventListener("click", function(){
                thePassParam(p1, p2);
            });
        }

        function thePassParam(p1, p2) {
            let result = p1 * p2;
            document.getElementById("demo4").innerHTML = result;
        }

        myFunction4();

        // 事件传递机制:冒泡、 捕获
        function myFunction5() {
            document.getElementById("myP1").addEventListener("click", function(){
                alert("你点击了内部的 p 元素");
            });

            document.getElementById("myDiv1").addEventListener("click", function(){
                alert("你点击了外部的 div 元素")
            });

            document.getElementById("myP2").addEventListener("click", function(){
                alert("你点击了内部的 myP2 元素")
            }, true);

            document.getElementById("myDiv2").addEventListener("click", function(){
                alert("你点击了外部的 myDiv2 元素")
            }, true);
        }

        myFunction5();



    </script>
    
</body>
</html>

三、 事件的传递

事件传递有两种方式:冒泡、捕获

冒泡:首先触发内部元素的事件,然后触发外部元素的事件;
为addEventListern()方法的默认情况,其默认值为false。

捕获:首先触发外部元素的事件,然后触发内部元素的事件;
其方法中的对应参数值为true。

参考

MDN:Event接口

https://developer.mozilla.org/zh-CN/docs/Web/API/Event
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值