EventTarget方法:addEventListener() 事件监听

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title></title>
	<!-- <link rel="stylesheet" href=""> -->
	<style type="text/css">
		div {
			padding: 50px;
		}

		#div1{
			background-color: pink;
		}

		#div2 {
			background-color: violet;
		}

		#div3 {
			background-color: purple;
		}

	</style>
	<script tpye="text/javascript">
		function fn1(){
			alert('1');
		}
		function fn2(){
			alert('2');
		}
		function fn(){
			alert('3');
		}

// <!-- 	事件监听:IE浏览器下 没有
// 	标准浏览器:谷歌、火狐 有

// 	事件监听形式二:
// 	IE:----------------捕获事件!
// 		obj.attachEvent(事件名称,函数/事件执行);
// 			1、事件名称:需要加上on;
// 			2、没有捕获;
// 			3、IE:标准IE》IE8 ;函数执行顺序》正序;
// 			非标准》IE5、6、7、9执行顺序是倒叙;
// 			4、this 统一指代window;
// 	标准浏览器:---------添加事件监听!
// 		obj.addEventListener(事件名称,函数/	事件执行,**是否捕获**);
//在旧版本的DOM规范中,第三个参数addEventListener()是一个布尔值,指示是否使用捕获。随着时间的推移,很明显需要更多的选择。不是向函数添加更多参数(在处理可选值时使事情变得非常复杂),而是将第三个参数更改为一个对象,该对象可以包含定义选项值的各种属性,以配置删除事件侦听器的过程。

//因为旧版浏览器(以及一些不太旧的浏览器)仍假设第三个参数是布尔值,所以您需要构建代码以智能地处理此场景。您可以通过对您感兴趣的每个选项使用特征检测来执行此操作。
// 			1 事件名称:不需要加on,如onclick→→click
// 			2、有捕获
// 			3、标准浏览器下函数执行顺序:正序;
// 			4、this指代事件的对象
// 
//	方式二:
// 	false:冒泡 ;true: 捕获
// 	document.addEventListener('click',fn1,false);
// 	document.addEventListener('click',fn2,false);




// 封装事件监听
		function bind(obj,evname,fn){
			// alert(111)
			if(obj.addEventListener){
				obj.addEventListener(evname,fn,false);
			}else{
				obj.attachEvent('on'+evname,function(){
					// ie浏览器中this指代的对象为window,故需要修改,
					// fn.call()==document.οnclick=fn
					// 通过call函数可以使IE浏览器确定函数调用对象。
					fn.call(obj);
				});
			}

		}
		// bind(document,'click',fn1);
		// bind(document,'click',fn2);








		// 取消事件绑定:
		// IE:obj.attachEvent(事件名称,函数)---> obj.detachEvent(事件名称,函数)

		// 标准浏览器:谷歌、火狐:
		// obj.addEventListener(事件名称,函数/事件执行,是否捕获)--->obj.removeEventListener(事件名称,函数/事件执行,是否捕获)
		window.onload=function(){
			var div1 = document.getElementById('div1');
			var div2 = document.getElementById('div2');
			var div3 = document.getElementById('div3');

			function fn1(){
				alert(this.id);
			}

			// div1.οnclick=fn1;
			// div2.οnclick=fn1;
			// div3.οnclick=fn1;
			// 结果为3 2 1
			// div1.addEventListener('click',fn1,true);
			// div2.addEventListener('click',fn1,true);
			// div3.addEventListener('click',fn1,true);

			// div3.removeEventListener('click',fn1,true);
			// 取消事件绑定:只有1 2输出





			//addeventlistener第三个参数,冒泡与捕获的区别
			
			// false:冒泡---->结果为3  2  1; true:捕获---->结果为1 2 3
			// false代表退出返回结果(进入div1-2-3不返回,退出时开始返回 3 2 1
			// true代表进入时打印结果 1 2 3 
			
			div1.addEventListener('click',function(){
				alert('1');

			},false);

			div2.addEventListener('click',function(){
				alert('3');

			},false);

			div3.addEventListener('click',function(){
				alert('2');

			},true);

			

			// 取消绑定无效,匿名函数创建两次地址不相同,无法取消
			div3.removeEventListener('click',function(){
				alert('1');

			},false);

			div2.removeEventListener('click',function(){
				alert('3');

			},false);

			div1.removeEventListener('click',function(){
				alert('2');

			},true);

		}
		// 结果为2  3  1;


	</script>
</head>
<body>
	<div id="div1">
		<div id="div2">
			<div id="div3">

			</div>
		</div>
	</div>
</body>
</html>

在这里插入图片描述
语法
target.addEventListener(type, listener[, options]);
target.addEventListener(type, listener[, useCapture]);
target.addEventListener(type, listener[, useCapture, wantsUntrusted ]); // Gecko/Mozilla only
参数部分
type
一个区分大小写的字符串,表示要侦听的事件类型。
listener
当发生指定类型的事件时接收通知(实现Event接口的对象)的对象。这必须是实现EventListener接口的对象,或JavaScript函数。
options (可选)
一个options对象,它指定有关事件侦听器的特征。可用选项包括:
capture:Boolean,表示在将这种类型的事件将被调度到已注册的listener,在被调度到DOM树下面的任何EventTarget之前。
once:Boolean,表示listener应该在添加后最多调用一次。如果为true,则会在调用时自动删除listener。
passive:Boolean,如果为true,则表示由listener指定的函数永远不会调用preventDefault()。如果被动侦听器进行了调用preventDefault(), 则除了生成控制台警告之外,用户代理将不执行任何操作。
mozSystemGroup:Boolean,表示应将侦听器添加到系统组。仅适用于在XBL中运行的代码或Firefox浏览器的chrome中。
useCapture (可选)
一个Boolean,指示是否在将这种类型的事件将被调度到已注册的listener,在被调度到DOM树下面的任何EventTarget之前。向上冒泡树的事件不会触发指定使用捕获的侦听器。当两个元素都已为该事件注册了句柄时,事件冒泡和捕获是两种传播事件的方式,这些事件发生在嵌套在另一个元素中的元素中。事件传播模式确定元素接收事件的顺序。如果未指定,则useCapture默认为false。
注意:对于附加到事件目标的事件侦听器,事件处于目标阶段,而不是捕获和冒泡阶段。无论useCapture参数如何,目标阶段中的事件将按照它们注册的顺序触发元素上的所有侦听器。
注意: useCapture并非总是可选的。理想情况下,您应该将其包含在最广泛的浏览器兼容性中。
wantsUntrusted
Firefox(Gecko)特有的参数。如果为true,侦听器接收由Web内容调度的合成事件(在浏览器chrom中默认为false,常规网页中默认是true)。此参数对于加载项中的代码以及浏览器本身很有用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值