事件注册与事件代理学习

<!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 style="display:grid;gap:0.5em;">
    <!-- 1.通过元素的属性:on +事件名称(事件属性),直接写到元素中的 缺点:将JS代码过多写入到html中,没有实现元素行为和结构的彻底分离-->
    <button onclick="alert('hello')">标签属性</button>
    <!-- <button onclick="hello()">提交</button> -->
    <script>
        function hello(){
            alert("hello");
        }
    </script>

    <!-- 2.元素对象添加属性的方式,动态添加到元素中缺点:事件方法之间相互覆盖 -->
    <button>动态属性</button>
    <script>
     const bth2=document.querySelector("button:nth-of-type(2)");
     bth2.onclick=function(){
     alert(1);
     };
     
      bth2.onclick=function(){
      alert(200);
     };
    //  事件的删除
     bth2.onclick=null;
    </script>
    
    <!-- 事件监听器 -->
 
    <button>监听器</button>
     <button>点击广告</button>
    <script>
        // bth3.addEventListener(事件类型,事件回调/方法名,是否冒泡/false)
        const bth3=document.querySelector("button:nth-of-type(3)");
       
        bth3.addEventListener("click",function(){
            alert('aaa');
        });
        // bth3.addEventListener("click",function(){
        //     alert('bbb');
        // });

        // 移除浏览器弹窗bbb
        // 如果事件方法使用了回调,则无法移除
        // bth3.removeEventListener("click",function(){
        //     alert("bbb");
        // });
        
        bth3.addEventListener("click",show);
        function show(){
            alert("bbb");
        }
        bth3.removeEventListener("click",show);

       
        // 事件派发
        // const myclick= new Event("click");
        // const bth4 =document.querySelector("button:nth-of-type(4)");
        // bth4.onclick=()=>alert(333); 

        // bth4.dispatchEvent(myclick);
        // let i=0;
        // bth4.addEventListener("click",()=>{
        //     console.log("点击了广告,已经赚了:" + i +"元");
        //     i += 0.2;
        // });


        const myclick= new Event("click");
        const bth4 =document.querySelector("button:nth-of-type(4)");
        // bth4.onclick=()=>alert(333); 
        // 间歇式定时器开启
      
        let i=0;
        bth4.addEventListener("click",()=>{
            console.log("点击了广告,已经赚了:" + i +"元");
            i += 0.2;
        setInterval (()=>bth4.dispatchEvent(myclick),3000);
        });
    </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>
        .red{
            color: red;
        }
        .bgc{
            background-color:yellow;
        }
        .blue {
          color: blue;
        }
        h2{
        border:5px solid red;
        }
        
    </style>
</head>
<body>
    <h2 style = "font-size:50px;">hello world</h2>
    
</body>
<script>
    // 过时了
    // document.querySelector("h2").className="red bgc";
    const h2 = document.querySelector("h2");
    // h2.classList:动态设置元素的class
    // 1.添加红色和背景色黄色
    h2.classList.add("red");
    h2.classList.add("bgc");
    // 2.移除背景色黄色
    h2.classList.remove("bgc");
    // 3.替换:将红色替换成蓝色
    h2.classList.replace("red","blue");

    // 添加背景色蓝色
    h2.style.backgroundColor = "green";
    // 拿到这个颜色的color值,返回是blue
    console.log(h2.className);
    // 拿到这个元素hello word的高和宽
    console.log(h2.hight);
    console.log(h2.width);
    // 因为"-"是非法标识符所以要去掉,S大写变成驼峰式
    console.log(h2.style.fontSize);
    // 计算属性
    // (获取那个元素的样式,支持伪元素)
    let styles=window.getComputedStyle(h2,null);
    console.log(styles);
    // 拿到当前元素的所有样式,不局限styles内联样式
    // 拿到高度
    console.log(styles.getPropertyValue("height"));
    console.log(styles.getPropertyValue("width"));

</script>
</html>

  

posted @ 2024-06-13 23:42  好好学习天天向上上上  阅读(6)  评论(0编辑  收藏  举报