浅谈js中的事件传播流程

java Script 事件传播流程

想要知道js中的事件传播流程,首先需要知道什么是事件,以及事件有什么作用。

事件

事件是JS与HTML之间的交互的实现。事件就是文档或浏览器窗口中发生的一些特定的交互瞬间。可以使用监听器(或处理程序)来预定事件,以便事件发生时执行相应的代码。

事件流

事件流描述的是从页面中接受事件的顺序,首先来看这张图
事件传播流程

捕获阶段

事件捕获过程:当我们点击TEXT时,首先是window->document->body->div->text.这个过程称为事件捕获,W3C浏览器的标准执行流程。

目标阶段

在目标节点上触发事件,被称为“目标阶段”

冒泡阶段

事件冒泡过程:text->div->body->document->window.这个过程称为事件冒泡。IE浏览器只支持冒泡,不支持捕获。W3C浏览器先执行捕获,后执行冒泡。

DOM事件流

“DOM2级事件”规定的事件包括三个阶段: 事件捕获阶段、处于目标阶段和事件冒泡阶段。首先发生的是事件捕获,为截获事件提供了机会。然后是实际的目标接收到事件。最后一个阶段是冒泡阶段,可以在这个阶段对事件做出响应。
还是以之前的点击按钮为例,在DOM事件流中,捕获阶段,”click”事件从document开始向下传递到body元素(注意,实际目标button在捕获阶段不会接收到事件)。目标阶段,button元素接收到”click”事件。最后,冒泡阶段,事件又被传播回文档。

DOM2级事件处理流程

DOM2级事件”规定了两个方法用于操作事件处理程序:addEventListener()和removeEventListener()。所有的节点都包含这两个方法,接收三个参数:要处理的事件名,作为事件处理程序的函数和一个布尔值。最后的参数如果是true,表示在事件捕获阶段调用事件处理程序,如果是false,表示在事件冒泡阶段调用事件处理程序。

<div id="div" style="width: 200px;height: 200px;background: #0ff;">
			<p id="p" style="background: #f00;">单机事件</p>
		</div>

如果给这两个标签添加冒泡和捕获事件,则该一共会触发四次事件

var oP = document.getElementById("p");
			var oDiv = document.getElementById("div");
			
			oP.addEventListener("click", function(e){
				console.log("oP冒泡");
			}, false);
			oP.addEventListener("click", function(e){
				console.log("oP捕获");
			}, true);
			oDiv.addEventListener("click", function(e){
				console.log("oDiv冒泡");
			}, false);
			oDiv.addEventListener("click", function(e){
				console.log("oDiv捕获");
			}, true);

在这里插入图片描述

阻止事件捕获和冒泡

在浏览器中添加事件时,默认有冒泡行为,有时我们需要阻止这种行为。

  1. 在创建的事件时,在事件的执行函数中添加return false
oP.onclick=function(){
	console.log("oP");
	return false;
}
  1. 在创建的事件时,在事件的执行函数中添加event.stopPropagation()方法既可以阻止事件冒泡,也可以阻止事件捕获,也可以阻止处于目标阶段。
oP.onclick=function(){
	console.log("oP");
	event.stopPropagation();
}
  1. IE浏览器阻止事件冒泡,在事件的执行函数中添加window.event.cancelBubble = true;
oP.onclick=function(){
	console.log("oP");
	window.event.cancelBubble = true; 
}
  1. 在创建的事件时,在事件的执行函数中添加event.stopImmediatePropagation()方法
oP.onclick=function(){
	console.log("oP");
	event.stopImmediatePropagation();
}

stopImmediatePropagation() 和 stopPropagation()的区别

后者只会阻止冒泡或者是捕获。 但是前者除此之外还会阻止该元素的其他事件发生,但是后者就不会阻止其他事件的发生

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着新媒体的快速发展,人们的信息获取方式和传播方式发生了巨大的变化,新媒体平台的出现和普及,使得人们的沟通方式和信息传播方式发生了深刻的变革。在这一背景下,群体极化现象也逐渐呈现出来。 群体极化是指社会上的个体在不同的话题和观点上,逐渐趋向于两极化的现象。在新媒体传播,由于信息的爆炸性增长和信息来源的多样化,人们的观点和态度也逐渐分化,形成了两极分化的局面。在一些敏感的话题上,人们往往会形成两个极端的观点,形成相互对立的态势。 群体极化现象在新媒体传播的原因主要有以下几点: 1.信息泛滥:新媒体传播平台上的信息量巨大,内容的真实性和可信度难以保证,这让人们在信息选择和判断上变得更加困难,容易形成盲目跟风和人云亦云的现象。 2.算法推送:新媒体平台的算法推送会根据用户的兴趣偏好推送相关内容,这让人们更加容易接触到自己喜欢的观点和信息,而忽略了其他的观点和信息,从而导致信息的不对称。 3.社交网络:新媒体平台上的社交网络使人们更容易形成小圈子,由于社交网络的人都有相似的兴趣和观点,容易形成共识,形成群体化的现象。 4.个人化需求:新媒体平台的个性化需求使得人们更加注重自己的兴趣和需求,而忽略了其他的观点和信息,从而导致信息的片面性和不全面性。 总之,群体极化现象在新媒体传播已经成为一个普遍现象,需要我们认识到其存在的问题和影响,采取相应的措施来加以遏制。这需要我们在信息传播和获取上更加理性和客观,同时也需要新媒体平台和相关部门加强监管和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值