web开发学习总结之js事件流详解

1 事件流原理

当你单击了某个元素,单击事件不仅仅发生在这个元素上,你也单击了它的父元素、父元素的父元素、……它的祖先元素,甚至单击了整个页面。
事件流原理
“事件流”描述的是页面上各个元素接收事件的顺序。
我们为了描述事件的传播顺序,特意人为规定了两个阶段:捕获阶段capture pahse、冒泡阶段bubbling phase。点击页面上的一个元素,事件在哪个阶段触发,这取决于添加事件监听的方法。
事件流原理

2 事件绑定

2.1 DOM0级事件绑定

DOM分为级别,DOM0级、1级、2级、3级,是不同的标准,标准一直在升级。
DOM0级事件绑定有两种方式。
第一种:是**把onclick当做属性添加给了oDiv元素。这种事件添加方法,只能监听冒泡过程。**事件的捕获阶段,没有监听成功。

oDiv.onclick = function(){
	// this 表示触发这个事件的元素
}

第二种是直接在标签里面写,工作中不使用。

<div id="box1" onclick="alert('我是box1');"></div>

用DOM0级添加事件监听,同一个元素只能有一个事件监听,若多写了几次事件监听以后写的为准。

2.2 DOM2级事件绑定

DOM1级规范中,没有对事件进行改动。
DOM2级做了新的规范,不用on***来绑定监听了,而是使用addEventListener()来绑定。
注意:若捕获阶段、冒泡阶段都想监听,得绑定两次,一次第三个参数写true,一次第三个参数写false

//它接受三个参数:什么事件、函数、是否监听捕获阶段。
// 第1个参数:事件名不用写on,  click、mouseover 、mouseout
// 第2个参数:函数可以是匿名函数,也可以是有名函数
// 第3个参数:布尔值,true表示监听捕获阶段、false表示监听冒泡阶段
oBox.addEventListener("click",function(){
	// this 表示触发这个事件的元素
},false);

3 事件对象

任何的事件处理函数,我们的浏览器、JS引擎会默认往里面传一个实参,就是事件对象。
通常用形参event来接收:

oDiv.onclick = function(event) {
	console.log(event);
}

所有这次事件的细节,都被封装到了这个event对象里面。
比如clientX、clientY就是这次点击的位置。

3.1 通用事件对象属性和方法

  • event.type 返回事件的类型,没有on, 比如”click” event.target
  • 返回你点击的最小的那个元素,即使这个元素身上没有监听,也是返回它
  • event.currentTarget 返回自己,this一定和event.currentTarget是一个元素,都是自己
  • event.bubbles 返回一个布尔值,表示这个事件是否冒泡;onmouseover冒泡,onmouseenter不冒泡
  • stopPropagation() 停止传播事件流
  • preventDefault() 阻止默认事件

3.2 clientX、clientY、screenX、screenY

全线兼容,表示事件触发这一瞬间的鼠标位置。

  • event.clientX 表示鼠标的位置,距离浏览器窗口左边边的距离
  • event.clientY 表示鼠标的位置,距离浏览器窗口上边边的距离
  • event.screenX 表示鼠标的位置,距离屏幕左边边的距离
  • event.screenY 表示鼠标的位置,距离屏幕上边边的距离
    event距离

3.3 IE中的event

IE浏览器的event对象是window对象的属性,而不是事件的实参。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值