16-事件

  1. 绑定事件
  2. 事件流
  3. 事件对象扩展
  4. 事件委托
  5. 事件类型

绑定事件

  • addEventListene("eventType" ,fun)
  • element.onEventType = fun:on加事件类型

区别:addEventListene在同一元素上的同一事件类型添加多个事件,不会被覆盖,而onEventType会覆盖;addEventListene可以设置元素在捕获阶段出发事件,而onEventType不能。

    <button>点击</button>
    <script>
        let btn = document.querySelector("button");
        // btn.onclick = function(){
        //     console.log("hello world")
        // }
        // btn.onclick = function(){
        //     console.log("hello javascript")
        // }
        btn.addEventListener("click",function(){
            console.log("今天学习什么呢")
        })
        btn.addEventListener("click",function(){
            console.log("JavaScript")
        })
    </script>

事件流

三个div嵌套,都绑定click事件,点击最内层的元素,事件会从外到内依次全部执行。

首先从外层到内层的事件流向过程叫事件捕获,其次从内层到外层的第二阶段叫做事件冒泡。

 事件捕获与事件冒泡:默认情况下,事件会在冒泡阶段执行

addEventListenerListener(eventType,fun,boolean)// 默认false:冒泡阶段触发;true:捕获阶段触发

阻止事件冒泡  e.stopPropagation();

需要在冒泡阶段使用,捕获阶段无效

实现如下功能;点击按钮显示一个容器盒子,点击容器,容器颜色发生改变,点击容器里的按钮,容器隐藏

    .box{
        width: 300px;
        height: 300px;
        background-color: red;
        display: none; 
        /* 初始隐藏  */
    }
    </style>
</head>
<body>
    <button class="show">显示</button>
    <div class="box">
        <button class="end">隐藏</button>

    </div>
    <script>
    let show = document.querySelector(".show");
    let box = document.querySelector(".box");
    let end = document.querySelector(".end");
    show.onclick = function(){
        box.style.display = "block";
    }
    end.onclick = function(e){
        box.style.display = "none";
        e.stopPropagation()
    }
    box.onclick = function(){
        this.style.backgroundColor = "blue"
    }

事件默认行为

去掉事件默认行为:e.preventDefault();or;return false

    // e.preventDefault();
    return false;

事件委托

通过e.target将子元素的事件委托给父级处理

ul列表内通过e.target绑定属性虽然是绑定的ul 但是ul无属性 所以给了li,通过ul.removeChild(e.target)删除li元素

    ul.onclick =function(e){
        ul.removeChild(e.target);
    }

:点击的是子级 但是绑定事件的父级  子级的事件委托给父级处理

事件类型

鼠标事件:点击、移入、移出

键盘事件:keydown 键盘点击  +on

触屏事件:触屏按下touchstart;触屏松开touchend; 触屏按下滑动touchmove;+on

键盘e.kerCoud 获取键盘的键码 每个按钮的键码都不同

        offset加首字母大写的上下左右来读取元素的偏移值

        向左移动可以设置为left+5 向右移动可以设置为left-5 上下同意 以此实现自由移动

实现一个跟随方向键移动的元素

    .box{
        width: 100px;
        height: 100px;
        background-color: red;
        position: absolute;
        top: 100px;
        left: 100px;
        
    }
    </style>
</head>
<body>
<div class="box"></div>
<script>
    let box = document.querySelector(".box");
    // console.log(box.offsetTop);
    document.onkeydown = function(a){
        // console.log(a.keyCode)
        let coud = a.keyCode;
        switch(coud){
            case 37:box.style.left = box.offsetLeft - 5 +"px" ;break;
            case 38:box.style.top = box.offsetTop - 5 +"px" ;break;
            case 39:box.style.left = box.offsetLeft + 5 +"px" ;break;
            case 40:box.style.top = box.offsetTop + 5 +"px" ;break;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值