事件冒泡和捕获

学习:https://www.cnblogs.com/gitByLegend/p/10492553.html

事件的绑定

dom事件的监听和触发都定义在EventTarget接口,所有节点都部署了这个接口,提供三个方法

  • addEventListener 添加监听事件
  • removeEventListener 移除监听事件
  • dispatchEvent 触发监听事件

事件冒泡和捕获

  • 事件冒泡:从target被触发,冒泡从里向外,直到document对象
  • 事件捕获:从最外层document开始向内传播直到target节点
  • 同时存在的时候,先捕获后冒泡,如果想反过来,可以让捕获事件延后执行
element.addEventListener(event, function, useCapture)

addEventListener有三个参数,event是被绑定的元素,function是触发时调用的函数,useCapture是冒泡捕获的配置项,默认为false,只进行冒泡。
第三个参数useCapture可以配置几个选项:capture,once,passive(监听函数不会调用事件的preventDefault,调用也会被忽略)

冒泡还是捕获?

当冒泡和捕获同时存在的时候,先捕获后冒泡,也就是说会先从document到target,再从target到document,遇到注册的事件就会被触发

  • 对于currentTarget 非target节点来说,会先捕获后冒泡触发
  • 对于target节点则会根据捕获冒泡函数注册的顺序进行触发

IE兼容性

ie9-通过attachEvent(event,function)来添加事件监听

         //添加事件
            function addEvent(obj,type,fn){
                if(obj.addEventListener){
                    obj.addEventListener(type,fn,false);
                 }else{
                     obj.attachEvent("on"+type,fn);
                  }
           }
            //移除事件
             function romeveEvent(obj,type,fn){
               if(obj.removeEventListener){
                    obj.removeEventListener(type,fn)
                }else{
                    obj.detachEvent("on"+type,fn);
                 }
             }

事件委托

通过事件冒泡或者捕获实现事件委托减少代码,提高性能;对于之后添加的元素同样可以拥有事件。

var onUl = document.getSelectQuery('ul')
onUl.onclick = function(e){
     var event = e || event;
     if(event.nodeName.toLowerCase === 'li'){
        alert('li')
    }
}

阻止事件冒泡 IE(cancelBubble)

  • stopPropagation() 阻止事件的传播,但是不会阻止target其他监听事件的触发
  • stopImmidatePropagation() 阻止其他事件的触发和事件的传播

事件委托和vue的优化

学习:https://blog.csdn.net/saucxs/article/details/90612942

我们可以看到在vue当中是没有事件委托的,有两个原因,其一是事件委托主要是解决的问题之一,事件的注册和移除,已经被vue解决,直接写@click即可,第二个是即使写了很多事件,vue会把相同的事件抽离出来,这样其实回调函数都是一个,已经是最小的损耗,最后我们可以在v-for上进行类似事件委托的实现,只需要在方法中判断是针对哪个子元素的事件。
可以通过事件修饰符来进行冒泡事件的一些变更,比如
.stop 阻止事件冒泡和捕获; .self 判断target为自身才会触发; .prevent 阻止默认事件; once 只触发一次;.capture 捕获模式 .passive 会告诉浏览器你不想阻止事件的默认行为,默认事件会立即触发,提高性能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容