热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vue的事件冒泡

什么是事件冒泡?先说冒泡,我们都知道水中有气泡的时候,气泡会从水底往上升,由深往浅的。但是水在上升的过程中会经历不同的深度的水。那么我们再来解释一下什么是事件冒泡,如果属性浏览器原

什么是事件冒泡?

先说冒泡,我们都知道水中有气泡的时候,气泡会从水底往上升,由深往浅的。但是水在上升的过程中会经历不同的深度的水。
那么我们再来解释一下什么是事件冒泡,如果属性浏览器原理的同学就知道,页面是由文档流(即dom树组成的),当我们在
一个时间触发的时候,这个事件就像这个气泡一样,从dom树的底层,一层一层的往上面传递,一直传递到dom的根节点,如果子元素和父级元素触发的是相同事件的时候,当子元素被触发的时候父元素也会被触发冒泡机制,这就是冒泡的基本原理。
《vue的事件冒泡》

在不同的内核浏览器中,冒泡是不一样的

IE<11: div => body => html => document

在其他内核中:div => body =>html => window

注意:在Javascript中,并非所有的事件都可以冒泡,像:blur、unload、load等事件就不能冒泡

示例代码:
Html




我是子元素

我是父级元素

css

#app{
width: 500px;
height: 500px;
margin: 200px auto;
background-color: #f5f5f5;
border:2px solid #dddddd;
}
#father{
width: 400px;
height: 400px;
background-color: rgb(168, 125, 125);
text-align: center;
color:red;
}
#child{
width: 200px;
height: 200px;
background-color: #fff;
color:blue;
}

js

var father = document.getElementById('father');
var child = document.getElementById('child');
father.addEventListener("click", function () {
console.log('我是父级元素')
}, false)
child.addEventListener("click", function () {
console.log('我是子集元素')
}, false)

《vue的事件冒泡》

当我点击子元素时,控制台打印如下图:

《vue的事件冒泡》

当我点击父元素时:控制台打印出来如下图:

《vue的事件冒泡》

可以看到,当我在点击子元素时,父元素绑定的点击事件也被触发了。
那么我们如何阻止这种事件传递呢?

如何阻止事件冒泡

废话少说,直接上代码

js

var father = document.getElementById('father');
var child = document.getElementById('child');
father.addEventListener("click", function () {
if(event && event.stopPropagation){
event.stopPropagation() // 非IE浏览器
}else{
event.cancelBubble = true; //IE浏览器
}
console.log('我是父级元素')
}, false)
child.addEventListener("click", function () {
if (event && event.stopPropagation) {
event.stopPropagation() // 非IE浏览器
} else {
event.cancelBubble = true; //IE浏览器
}
console.log('我是子集元素')
}, false)

在W3C中,规定DOM标准通过调用event对象的stopPropagation()方法即可阻止冒泡型事件的进一步传递。

那么在vue中我们如何使用呢?

我们可以用.stop修饰符绑定在子元素上面,阻止其向父元素冒泡,从而达到不会触发冒泡事件











当然,事件冒泡是浏览器的默认行为,之所以这样设计,是有原因的,因为有时候事件冒泡可以提供很多的便利,但是使用不当就会造成很多不必要的bug。

总结:1.事件冒泡的基本原理

2.原生js和vue中分别如何阻止事件冒泡

本文首发微信公众号:码客小栈
欢迎扫描二维码关注公众号,小码不定时的分享工作中的问题和前端、python等文章 (还有漂亮的小姐姐哟!!!)。
《vue的事件冒泡》


推荐阅读
  • 前端监控数据网络(要求阻拦)
    所谓web,纵然你我素未谋面,便知志趣相投;深居简出,亦知天下之大。01—为何阻拦要求如今的web运用,大都是经由过程要求(http)去猎取资本,拿到资本后再显现给用户,一个页面中 ... [详细]
  • 认识Vue关于Vue的描述有不少,不外乎都会拿来与Angular和React对比,同样头顶MVVM双向数据驱动设计模式光环的Angular自然被对比的最多,但到目前为止,Angul ... [详细]
  • vue.js2.0点击获取自己的属性和jquery
    <!DOCTYPEhtml><html><head><metacharsetUTF-8><title>< ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 【Vue基础】监听属性watch
    Vue监听属性是watch,我们可以通过watch来响应数据的变化。代码示例: ... [详细]
  • 本文涉及源码版本为2.6.9准备工作down一份Vue源码,从package.json入手,找我们需要的代码1、package.json中的scripts,build:nodesc ... [详细]
  • vue.js如何实现数据的双向绑定呢?与angular不同。vue利用的是es5的defineproperty特性。1.一个小例子 ... [详细]
  • 多人博客体系断断续续写了个单页面的博客体系,实际上是想给我和我的小伙伴写日记用的,租了do服务器,express写接口,用nginx反向代办,也算是练练手。不得不说外洋的服务器照样 ... [详细]
  • Vue 响应性
    Vue响应性-Vue2.x响应性响应性原理采用Object.defineProperty实现观察者模式当你把一个普通的JavaScript对象传入Vue实例作为data选 ... [详细]
  • 引见socket.io是一个基于websocket完成的前后端及时通信框架,也对低版本浏览器做了封装。运用起来简朴,轻易。首次运用起来可能会比较含糊,实在重要经常使用就几个要领,简 ... [详细]
  • #ReactivityFundamentals#DeclaringReactiveState ... [详细]
  • Vue.Js_Vue之vue.js声明式渲染
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Vue之vue.js声明式渲染相关的知识,希望对你有一定的参考价值。ht ... [详细]
  • Vue的组件化
    文章目录Vue的组件化一、认识组件化1.什么是组件化2.组件化思想二、注册组件1.组件的使用步骤三、组件其他补充1.全局组件和局部组件2.父组件和子组件3.组件的语法糖写法4.组件 ... [详细]
  • html css在线便宜,在线HTML、CSS和JS工具汇总
    本文提供了在线HTML、CSS和JS工具汇总,它们都是直接在浏览器上可以使用的在线工具,基本上都是比较简单操作的,只适合简单的调试工作&# ... [详细]
author-avatar
e絕纞乄
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有