蓝旭前端05:JavaScript进阶

一、获取元素

1.通过id获取元素

ID:是元素的唯一属性,只能有一个。

document.getElementById('idname');

2.通过类名获取元素

CLASS:class属性不是唯一的可以有多个,多个类名之间用空格隔开,返回的是一个数组

document.getElementsByClassName('classname');

3.通过标签名获取元素

tag:标签如div,p,hr1;

document.getElementsByTagName('div');

4.通过选择器获取元素

selector:选择器如:#Id,.class,标签名等。

​
        //querySelector只返回第一个与之匹配的元素
        document.querySelector('selectorname');
        //querySelectorAll返回所有匹配的元素
        document.querySelectorAll('seletorname');

​

二、事件监听

1.事件监听

当一个元素绑定了一个监听器后,对应事件触发时会执行相应函数。

element.addEventListener(event, function, useCapture)

解释:event是事件的类型,function是事件触发时执行的函数,useCapture是一个布尔值,表示事件是否在捕获阶段执行。

事件类型:click、mouseover、mouseout、keydown、keyup等。
事件处理函数:事件触发时执行的函数。
捕获阶段:事件从最外层元素向内层元素传播的阶段。例如:点击一个按钮,事件会从document传播到按钮。

2.监听例子

<div id="div">
        <button id="button">点此触发事件</button>
    </div>
    <script>
        document.getElementById('button').addEventListener('clcik',function(){
            console.log('click');
        },false);
    </script>

点击按钮触发点击事件,监听器执行函数,控制台打印click。

3.冒泡阶段

  • 什么是冒泡阶段:事件从内层元素向外层元素传播的阶段。例如:点击一个按钮,事件会从按钮传播到document。
  • 捕获阶段:事件从最外层元素向内层元素传播的阶段。例如:点击一个按钮,事件会从document传播到按钮。

冒泡阶段和捕获阶段的执行顺序:先捕获再冒泡。

实例:

<!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>
    <div id="div">
        <button id="button">点此触发事件</button>
    </div>
    <script>
        document.getElementById('div').addEventListener('click',function(){
            console.log('div')
        },false)
        document.getElementById('button').addEventListener('click',function(){
            console.log('click')
        },false)
    </script>
</body>
</html>

当点击按钮时先触发button的事件然后冒泡到父元素,使得父元素事件触发。

控制台先打印click在打印div。

怎么阻止冒泡:使用event.stopPropagation()方法。

三、事件对象

1.事件对象

事件对象是事件触发时传递给事件处理函数的一个对象,包含了事件的相关信息。

element.addEventListener('event', function(event) {
    // 事件对象
})

事件对象的属性:type、target、currentTarget、clientX、clientY等。
事件对象的方法:preventDefault()、stopPropagation()等。
事件对象的类型:click、mouseover、mouseout、keydown、keyup等。
事件对象的坐标:事件触发时的坐标。

target与currentTarget别:target是指向点击事件触发时的元素,currentTarget是指向获取的id元素。currentTarget的用法主要是帮助你确定当前处理事件的元素,并在需要时阻止事件冒泡或进行其他相关操作。

四、事件委托

事件委托是指将事件绑定到父元素上,通过事件对象的target属性判断事件源,从而执行对应的事件处理函数。

  • 事件委托的优点:减少事件绑定,提高性能。
  • 事件委托的原理:事件冒泡。
  • 事件委托的应用:动态添加元素五、 

五、事件绑定

1.事件绑定

事件绑定是指将元素绑定上事件处理函数,当事件触发时函数执行。

<!DOCTYPE html>
<html>
<head>
    <title>事件绑定</title>
</head>
<body>
    <button id="btn">按钮</button>
    <script>
        document.getElementById('btn').addEventListener('click', function() {
            console.log('click')
        }, false)
    </script>
</body>
</html>
  • 事件绑定的优点:提高代码维护性,增强页面交互性,灵活性:使得开发者可以根据具体需求定制事件处理行为。
  • 事件绑定的原理:事件监听。

六、事件解绑

1.事件解绑

事件解绑是指将事件处理函数从元素上解绑,当事件不再触发时不执行对应的事件处理函数。

<!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>
    <div>
        <button id="button">点我</button>
    </div>
    <script>
        function myFuction(){
            console.log('button')
            document.getElementById('button').removeEventListener('click',myFuction)
        }
        document.getElementById('button').addEventListener('click',myFuction);
    </script>
</body>
</html>

当第二次按下按钮时已经解绑,控制台不会再次打印button。

七、事件触发

1.事件触发

事件触发通常是在编程中,当特定的事件(如用户点击按钮、鼠标移动、键盘输入等)发生时,自动执行相应的代码或函数。

element.dispatchEvent(event)
<!DOCTYPE html>
<html>
<head>
    <title>事件触发</title>
</head>
<body>
    <button id="btn">按钮</button>
    <div id="clr">请把鼠标移动到上面</div>
    <div id="keyon">现在没有按下</div>

    <script>
        var btn = document.getElementById('btn');
        btn.addEventListener('click', function() {
            console.log('click');
        }, false);
        // 手动触发按钮的点击事件
        btn.dispatchEvent(new Event('click'));
        var clr = document.getElementById('clr');
        clr.addEventListener('mouseover', function() {
            this.style.backgroundColor = 'red';//请把鼠标移动到上面背景颜色变成红色
        }, false);
        // 手动触发div的mouseover事件
        clr.dispatchEvent(new Event('mouseover'));

        var keyon = document.getElementById('keyon');
        document.addEventListener('keydown', function() {
            keyon.innerHTML = '按下了键盘';
        }, false);
        document.addEventListener('keyup', function() {
            keyon.innerHTML = '现在没有按下';
        }, false);

        // 手动触发键盘事件
        document.dispatchEvent(new KeyboardEvent('keydown', {
            key: 'a'
        }));

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

八、事件处理程序

事件处理程序

事件处理程序是指事件触发时执行的函数,用于处理事件。

  • 事件处理程序的类型:内联事件处理程序、DOM0级事件处理程序、DOM2级事件处理程序。
  • 事件处理程序的优点:解耦,提高代码的可维护性。

1.内联事件处理程序

<!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 onclick="console.log('click')">点我</button>
</body>
</html>

优点:代码简洁,直观。

缺点:维护性低

2.DOM0级事件处理程序

DOM0级事件处理程序是指将事件处理函数赋值给元素的事件属性。

<!DOCTYPE html>
<html>
<head>
    <title>DOM0级事件处理程序</title>
</head>
<body>
    <button id="btn">按钮</button>
    <script>
        document.getElementById('btn').onclick = function() {
            console.log('click');
        }
    </script>
</body>
</html>

优点:简单,直观

缺点:不利于维护,同一事件只能绑定一个处理函数。

3.DOM2级事件处理程序

<!DOCTYPE html>
<html>
<head>
    <title>DOM2级事件处理程序</title>
</head>
<body>
    <button id="btn">按钮</button>
    <script>
        document.getElementById('btn').addEventListener('click', function() {
            console.log('click');
        }, false)
    </script>
</body>
</html>

优点:支持事件委托、支持事件解绑、支持事件触发、支持事件对象。
注意:DOM2级事件处理程序不会覆盖元素原有的事件处理函数。
注意:DOM2级事件处理程序推荐使用,提高代码的可维护性。
注意:DOM2级事件处理程序的第三个参数useCapture是一个布尔值,表示事件是否在捕获阶段执行,默认是false(可不写)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值