JS学习之事件流
本文是原创文章,如需转载,请注明文章出处
JS和AS师出同源,所以事件流的3个阶段也跟AS一样,分别是捕获阶段,目标阶段,冒泡阶段。
下面写了个例子可以清晰的看出事件流的顺序:
eventTest.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="eventTest.js"></script>
</head>
<body>
<div id="div" style="position:relative;width:100%;height:200px;background: #00ff00">
<button id="btn" style="position:absolute;display:block;left:50%;top:50%;margin-left:-26px;margin-top:-10px">button</button>
</div>
</body>
</html>
eventTest.js
window.onload = function()
{
init();
} function init(){
var div = document.getElementById("div");
div.addEventListener("click", onDivCaptureHandler, true);
div.addEventListener("click", onDivBubbleHandler, false); var com = document.getElementById("btn");
com.addEventListener("click", onBtnCaptureHandler, true);
com.addEventListener("click", onBtnBubbleHandler, false);
} function onDivCaptureHandler(event){
console.log("div capture----eventPhase:" + event.eventPhase);
} function onDivBubbleHandler(event){
console.log("div Bubble-----eventPhase:" + event.eventPhase);
} function onBtnCaptureHandler(event){
console.log("btn capture-----eventPhase:" + event.eventPhase);
} function onBtnBubbleHandler(event){
console.log("btn bubble-----eventPhase:" + event.eventPhase);
}
这个例子很简单,先添加一个绿色的div,其中有个居中的按钮,JS代码中分别给div和按钮添加点击事件的监听器,需要注意的是,addEventListener的第三个参数,为true时这个事件只在捕获阶段触发。
以下是结果:

点击按钮之后,控制台输出:
div capture----eventPhase:1
btn capture-----eventPhase:2
btn bubble-----eventPhase:2
div Bubble-----eventPhase:3
由此可以清晰的看出,捕获阶段是从最上层的元素逐层向下直到最具体的点击对象,而冒泡阶段是从最具体的点击对象逐层向上直到最上层。
另外,需要注意的是,addEventListener的第三个参数无论是true还是false,当具体对象的监听器触发时,事件阶段都是2,也就是目标阶段。
JS学习之事件流的更多相关文章
- js学习笔记---事件代理
事件机制可以分为捕获型和冒泡型.捕获型是事件由父级元素(DOM)传递到子元素.冒泡型正好相反.事件机制默认为冒泡型.事件机制可以通过参数指定. 事件委托可以将我们绑定在document上的事件自动绑定 ...
- js学习笔记-事件委托
通过事件委托,你可以把事件处理器绑定到父元素上,避免了把事件处理器添加到多个子级元素上.从而优化性能. 事件代理用到了事件冒泡和目标元素.而任何一个元素的目标元素都是一开始的那个元素. 这里首先要注意 ...
- JS学习笔记-事件绑定
一.传统事件模型 传统事件模型中存在局限性. 内联模型以HTML标签属性的形式使用,与HTML混写.这样的方式无疑造成了改动以及扩展的问题,已经非常少使用了. 脚本模型是将事件处理函数写到js文件里, ...
- JS学习之事件冒泡
(1)什么是事件起泡 首先你要明白一点,当一个事件发生的时候,该事件总是有一个事件源,即引发这个事件的对象,一个事件不能凭空产生,这就是事件的发生. 当事件发生后,这个事件就要开始传播.为什 ...
- node.js学习(4)事件
1 导入事件库
- JS学习五(js中的事件)
[JS中的事件分类] 1.鼠标事件 click/bdlclick/onmouseover/onmouseout 2. HTML事件 onload/onscroll/onsubmit/onchange/ ...
- JS的事件绑定、事件流模型
.t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.JS事件 (一)JS事件分类 1.鼠标事件:click/dbclick ...
- JS里关于事件的常被考察的知识点:事件流、事件广播、原生JS实现事件代理
1.JS里面的事件流 DOM2级事件模型中规定了事件流的三个阶段:捕获阶段.目标阶段.冒泡阶段,低版本IE(IE8及以下版本)不支持捕获阶段 捕获事件流:Netscape提出的事件流,即事件由页面元素 ...
- 深入理解JS的事件绑定、事件流模型
一.JS事件 (一)JS事件分类 1.鼠标事件: click/dbclick/mouseover/mouseout 2.HTML事件: onload/onunload/onsubmit/onresi ...
随机推荐
- SQLServer游标(Cursor) (B)
游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次以行或者多行前进或向后浏览数据的能力.我们可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许 ...
- Nop源码分析三
程序的初始化工作和Ioc工作已经做完,nop默认引擎已经初始化. 下面在回到global文件的启动方法Application_Start()中, 1,继续分析下面的代码: var dependency ...
- 对属性NaN的理解纠正和对Number.isNaN() 、isNaN()方法的辨析
1.属性NaN的误解纠正 NaN (Not a Number)在w3c 中定义的是非数字的特殊值 ,它的对象是Number ,所以并不是任何非数字类型的值都会等于NaN,只有在算术运算或数据类型转换出 ...
- bzoj 1162 network
树上的区间第k小数,以前写的主席树是一直MLE的,后来看到一种在初始化的时候的优化:直接DFS这颗树,得到每个点的主席树,然后更新的时候另外对DFS序建主席树,答案加上初始每个点的主席树,这样在初始化 ...
- DOM和DHTML等,复习总结
DOM(Document Object Model),文件对象模型.HTML(HyperText Markup Language),超文本标记语言.HTML的超类:Node->Document: ...
- 安装 whmcs
1.下载下来后(自己百度网盘),用scp 上传, 在网站能访问的地方新建目录,例如 whmcs 目录,解压到内 2.网站访问 http://ip/whmcs/index.php 提示需要安装 ionc ...
- 170105、MySQL 性能优化的最佳 20+ 条经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...
- C#转VB.NET
这个不能用了 http://www.developerfusion.com/tools/convert/csharp-to-vb/ 搜索几十分钟才找到另一个桌面版的,不怎么好用! http://www ...
- Codeforces Round #389 (Div. 2, Rated, Based on Technocup 2017 - Elimination Round 3) A
Description Santa Claus is the first who came to the Christmas Olympiad, and he is going to be the f ...
- Android静默安装实现方案
之前有很多朋友都问过我,在Android系统中怎样才能实现静默安装呢?所谓的静默安装,就是不用弹出系统的安装界面,在不影响用户任何操作的情况下不知不觉地将程序装好.虽说这种方式看上去不打搅用户,但是却 ...