博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅析JavaScript事件流——冒泡
阅读量:7250 次
发布时间:2019-06-29

本文共 1737 字,大约阅读时间需要 5 分钟。

什么是事件冒泡流

我们知道事件流指的是从页面中接受事件的顺序。

为了形象理解事件冒泡,可以想象三军主将诸葛亮,在帐内运筹帷幄,眼观六路耳听八方,这时候前方的战事情况就需要靠传令兵来传达,当第一位传令兵接到士官战事信息,打出旗语,百米之外的第二个传令兵看到后打出同样的旗语,第三个,第四个....,直到信息传到诸葛亮手中。用专业术语解释就是:当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发。这一过程被称为事件冒泡;这个事件从原始元素开始一直冒泡到DOM树的最上层。

(还有一种事件流为捕获,可以理解为诸葛亮向战场上的某位士官发布指令的过程)

二、事件冒泡的用处

1、事件委托

就是把事件处理器(或监听器)添加到parent元素上,避免把其添加到多个子元素上

我是span标签
我是a标签

2、让不同对象捕获同一事件

这个其实是给不同对象绑定相同的触发事件,比如点击onclick,当点击其中一个的话,所有这些对象就会触发各自所对应的函数操作。

123 456 789

三、阻止事件冒泡

先要清楚什么时候需要阻止事件冒泡:比如document上有A事件,div有B事件,div里的span有C事件(ABC是同类型事件,比如都是onclick),若不给div和span阻止事件冒泡的话,点击span时就会触发到B、C事件。所以事件冒泡可能会激活我们本来不想激活的事件,导致程序错乱,所以必要时,我们要阻止事件冒泡。

阻止冒泡事件要考虑浏览器的兼容问题:

if(Event.stopPropagation){            Event.stopPropagation();      //非IE}else{            Event.cancelBubble=true;    //IE}

四、冒泡排序算法(虽然和JavaScript中的冒泡事件没多大关系,了解一下也不是坏事)

冒泡排序(Bubble Sort),是一种领域的较简单的。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。(来自百度百科)
冒泡排序算法的运作如下:(从后往前)
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

JavaScript冒泡排序:

function bubbleSort(arr) {    var i = arr.length, j;    var tempExchangVal;    while (i > 0) {        for (j = 0; j < i - 1; j++) {            if (arr[j] > arr[j + 1]) {                tempExchangVal = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = tempExchangVal;            }        }        i--;    }    return arr;} var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];var arrSorted = bubbleSort(arr);console.log(arrSorted);alert(arrSorted);

 

转载于:https://www.cnblogs.com/qjqcs/p/5409326.html

你可能感兴趣的文章
HTTP/2
查看>>
[单刷APUE系列]第十七章——高级进程间通信
查看>>
分布式之消息队列的特点、选型、及应用场景详解
查看>>
多迪学员问到最多的问题:为什么要学习Python编程语言?
查看>>
从vue中学习defineProperty
查看>>
漂亮的颜色
查看>>
Android Volley 源码解析(二),探究缓存机制
查看>>
Go源码剖析:内置类型
查看>>
102. Binary Tree Level Order Traversal
查看>>
SAP云平台对Kubernetes的支持
查看>>
原来实现GCP用客户端登录这么简单啊
查看>>
PAT A1057 分块思想
查看>>
PAT A1007 动态规划
查看>>
VUE父子组件传递数据
查看>>
前端知识点——图片
查看>>
别人家的程序员是如何使用 Java 进行 Web 抓取的?
查看>>
95%的技术面试必考的JVM知识点都在这,另附加分思路!
查看>>
日期类问题
查看>>
区块链入门之基础知识
查看>>
mysql锁(Innodb)
查看>>