饥人谷技术博客

DOM事件与事件委托

2021-04-16  本文已影响0人  茜Akane

Get Started

DOM事件

点击事件,先从这里开始研究

代码

<div class="1">
    <div class="2">
        <div class="3">
            文字 
        </div>
    </div>
</div>

给三个div分别添加了事件监听,当点击文字时,最先点击了哪个div,最新按调用哪个事件监听函数?

2002年,W3C发布标准

• 文档名伪DOM Level 2 Events Specification
• 规定浏览器应该同时支持两种调用顺序
首先按照最外层=>最里层(1->2->3)顺序看看有没有函数监听
然后按照最里层=>最外层(3->2->1)顺序看看有没有函数监听
• 有监听函数就调用,并提供事件信息,没有就跳过
术语
从外向内找监听函数,叫事件捕获
从内向外找监听函数,叫事件冒泡
注意:开发者可以自己选择把监听函数放在捕获阶段还是冒泡阶段。

示意图

image.png

addEventListener

• 事件绑定API

    x.attachEvent('onclick', fn)  // 冒泡(IE 5)
    x.addEventListener('click', fn)  // 捕获(网景)
    x.addEventListener('onclick', fn, bool)

target V.S. currentTarget

一个特例

div.addEventListener('click', f1)
div.addEventListener('click', f2,true)

答案:谁先监听谁先执行

取消冒泡

插曲:如何阻止滚动

    //  pc端 
    div.addEventListener('wheel',(e) => {    // 滚轮事件
        e.preventDefault();  //  阻止默认事件
    })
    // 然后CSS设置 ::webkit-scrollbar{
        // width:0;!important
    //}   即可实现无滚动
    
    //  移动端
    div.addEventListener('touchstart',(e) => {   // 触摸事件
        e.preventDefault();  //  阻止默认事件
    })

自定义事件

事件委托

封装事件委托

JS支持事件吗?

上一篇下一篇

猜你喜欢

热点阅读