【API.三】

一.事件流

 

1.1 事件流:事件完整执行过程中的流动路径

      说明:触发事件时,会经历两个阶段:捕获、冒泡。

      捕获:从父到子     冒泡:从子到父 (实际工作中以冒泡为主)

 1.2事件捕获

1.3事件冒泡

 1.4.1阻止冒泡(其实是阻止流动)

原因:因为默认是冒泡的,所以容易导致父级元素被影响,若想把事件限制在当前元素内,就需要阻止冒泡

事件对象.stopPropagatin()
<body>
	<div class="father">
		<div class="son"></div>
	</div>
	<script>
		const fa = document.querySelector('.father')
		const son = document.querySelector('.son')
		document.addEventListener('click',function(){
			alert('我是爷爷')
		})
		fa.addEventListener('click',function(e){
			alert('我是爸爸')
			e.stopPropagation()//阻止冒泡
		})
		son.addEventListener('click',function(){
			alert('我是儿子')
		}) 
	</script>
</body>

注意:这个方法本质上是阻断事件流动传播,所以不光在冒泡阶段有效,捕获阶段也有效

1.4.2阻止默认行为

const a = document.querySelector('a')
	a.addEventListener('click', function(e){
		//阻止默认行为 跳转链接,点击之后不会跳到百度
		e.preventDefault()
	})

 1.5解绑事件

老版本:

 

新版本:

 因为匿名函数没有函数名,所以无法解绑,只有写成上图样式才能解绑

其他:鼠标经过事件:mouseover、mouseout有冒泡效果

                                    mouseenter、mouseleave没有冒泡效果(推荐)

二.事件委托

 事件委托:原理是利用事件冒泡的特点,给父元素注册事件,当我们触发子元素时,会冒泡到父元素身上,从而触发父元素事件,这样可以减少注册次数,提高程序性能。

<body>
	<ul>
		<li>1</li>
		<li>2</li>
		<li>3</li>
		<li>4</li>
		<li>5</li>
		<p>6</p>
	</ul>
	<script>
		//事件委托
		const ul = document.querySelector('ul')
		//1.
//		ul.addEventListener('click', function(){
//			this.style.color = 'red' //点击一个,所有都变红
//		})
		//2.
		ul.addEventListener('click', function(e){
			e.target.style.color = 'blue' //e.target是 点击的那个
		})
		//3.
		ul.addEventListener('click', function(e){
			if(e.target.tagName = 'LI'){ //因为e.target会使下面的不需要变色的也变色
				e.target.style.color = 'green' //所以需要指定标签名字i,并且是大写
			}
		})
	</script>
</body>

注意:事件对象.target.tagName = '大写标签名',这样才是找到真正触发的元素

三.其他事件-------------页面加载、元素滚动、页面尺寸

3.1页面加载事件

 3.2元素滚动事件

 

 

 

3.3页面尺寸事件

 

获取宽高:可见部分宽高(不包含边框、margin、滚动条等)clientWidth、clientHeight

案例:分析flexible.js源码

 

 四.元素尺寸与位置

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值