美文网首页
JS事件冒泡、事件捕获

JS事件冒泡、事件捕获

作者: 码字仓颉 | 来源:发表于2017-12-29 00:16 被阅读0次

问题

1、编写一个通用的事件监听函数

function bindEvent(elem, type, selector, fn){
    if(fn == null){
        fn = selector;
        selector = null;
    }
    elem.addEventListener(type,function(e){
        var target;
        if(selector){
            target = e.target;
            if(target.match(selector)){
                fn.call(target,e);
            }
        }else{
            fn(e);
        }
    });
}
//不使用代理
var a = document.getElementById("link1");
bindEvent(a, 'click', function(e){
    alert('clicked');
});
//使用代理
var div1 = document.getElementById("div1");
bindEvent(div1, 'click', "a", function(e){
    alert('clicked');
});

2、描述事件冒泡流程

  • DOM树形结构
  • 事件冒泡
  • 阻止冒泡
    e.stopPropagation()
  • 冒泡应用
    事件代理,在父元素上绑定事件

3、对于一个无限下拉加载图片的页面,如何给每个图片绑定事件

知识点

1、事件绑定

2、事件流模型

事件流描述的是从页面中接收事件的顺序。DOM结构是树形结构,当页面中的某一个元素触发了某个一个事件,事件会从最顶层的window对象开始,向下传播到目标元素,途径的祖先节点都会触发对应的事件,如果当前节点的该事件绑定了事件处理函数的话,则会执行该函数当事件达到目标元素并执行绑定函数(如果有绑定的话)后,事件又会向上传播到 window 元素,途径的祖先节点都会触发对应的事件(如果绑定事件处理函数的话)。

事件流包含三个阶段:

  • 事件捕捉阶段:事件开始由顶层对象触发,然后逐级向下传播,直到目标元素;
  • 处于目标阶段:处在绑定事件的元素上;
  • 事件冒泡阶段:事件由具体的元素先接收,然后逐级向上传播,直到不具体的元素;
    image

注释
一般来说事件冒泡机制,用的更多一些,所以在 IE8 以及之前,IE只支持事件冒泡。IE9+/FF/Chrome这2种模型都支持,可以通过addEventListener((type, listener, useCapture)的useCapture来设定,useCapture=false(默认)代表着事件冒泡,useCapture=true代表着采用事件捕获。

3、代理

<div id="div1">
    <a href="#">a1</a>
    <a href="#">a2</a>
    <a href="#">a3</a>
    <a href="#">a4</a>
    ......
</div>

var div1 = document.getElementById("div1");
div1.addEventListener('click',function(e){
    var target = e.target;
    if(target.nodeName === "A"){
        alert(target.innerHTML);
    }
})

相关文章

  • 事件基础(2)

    js事件的三个阶段:捕获,目标,冒泡 IE:IE事件流是事件冒泡流 Netscape事件流是事件捕获流 IE事件...

  • JS事件相关基础

    js事件: 键盘事件: JS中的事件冒泡和事件捕获: 1、事件冒泡。如下代码: 点击button事件,连同父元素绑...

  • vue 阻止事件冒泡,捕获方法

    要想了解 VUE 阻止事件冒泡和捕获方法,首先要了解一下 JS 事件和 JS 阻止事件冒泡,捕获方法 1. js ...

  • 图解事件委托

    事件捕获和事件冒泡 说到事件委托我们就不得不提JS中事件的整个历程中的两个机制:事件捕获和事件冒泡。 然而要说这事...

  • 搜狗面试

    原型链上手写事件,手写原生js实现ajax事件,jsonp实现原理,阻止事件IE冒泡代码,事件捕获、处理,冒泡代码...

  • Javascript 事件代理、冒泡和捕获

    2019开工荒了两天,赶紧开始! 为什么写事件代理、冒泡、捕获,首先冒泡和捕获是js事件的核心基础,事件代理原理来...

  • js 阻止冒泡 阻止默认事件

    js冒泡和捕获是事件的两种行为,使用event.stopPropagation()起到阻止捕获和冒泡阶段中当前事件...

  • 默认事件

    js冒泡和捕获是事件的两种行为,使用event.stopPropagation()起到阻止捕获和冒泡阶段中当前事件...

  • JS事件冒泡、事件捕获

    问题 1、编写一个通用的事件监听函数 2、描述事件冒泡流程 DOM树形结构 事件冒泡 阻止冒泡e.stopProp...

  • js 冒泡事件、捕获事件

    冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。顺序:div -> ...

网友评论

      本文标题:JS事件冒泡、事件捕获

      本文链接:https://www.haomeiwen.com/subject/isvbgxtx.html