用JavaScript实现事件移除,派发,委托

<!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">
    <title>Document</title>
    <style>
        .active{
            color: red;
        }
    </style>
</head>
<body>
    <button class="btn">按钮</button>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
    <script>
         // EventTarget移除
        var btnEle=document.querySelector('.btn');
        function fn(){
            console.log('输出');
        }
        btnEle.addEventListener('click',fn)
        
        var time1=setInterval(function(){
            btnEle.removeEventListener('click',fn)
        },5000)
        
        // 事件派发
        window.addEventListener('yt',function(){
            console.log('来自yt的呼唤');
        })
        // 派发'yt'事件
        window.dispatchEvent(new Event('yt'));
        
        //事件委托event delegation
        //ul下面4个li,点击li对应的li变红色
        var ulEle=document.querySelector('ul');
        var activeLiel=null;//第一次先置空
        ulEle.addEventListener('click',function(e){
            //方法一
            //将已经拥有active的移除
            // var actEle=ulEle.querySelector('.active');
            // actEle&&actEle.classList.remove('active');//在actEle有值的情况下调用后面
            // 方法二,用变量记录e.target
            activeLiel&&activeLiel.classList.remove('active')//在activeLiel有值的情况下调用后面
            //给点击的对象添加类属性
            e.target.classList.add('active');
            // 给activeLiel赋值
            activeLiel=e.target;
        })
    </script>
</body>
</html>

 

posted @ 2022-11-08 21:52  theYT  阅读(113)  评论(0)    收藏  举报