事件传播机制-事件捕获-事件-冒泡-事件委托
时间:2021-07-30
本文章向大家介绍事件传播机制-事件捕获-事件-冒泡-事件委托,主要包括事件传播机制-事件捕获-事件-冒泡-事件委托使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box{
box-sizing: border-box;
margin:20px auto;
padding-top: 20px;
width: 300px;
height: 300px;
background: lightblue;
}
.outer{
box-sizing: border-box;
margin: 0 auto;
padding-top: 20px;
width: 200px;
height: 200px;
background: lightcoral;
}
.inner{
margin: 0 auto;
width: 100px;
height: 100px;
background: lightgoldenrodyellow;
}
</style>
</head>
<body>
<div class="box">box
<div class="outer">outer
<div class="inner">inner</div>
</div>
</div>
<script>
let box = document.querySelector('.box'),
outer = document.querySelector('.outer'),
inner = document.querySelector('.inner');
/**
* DOM 0级 绑定中给元素事件绑定的方法, 都是在目标阶段 =》 冒泡阶段触发的
* 从里 往外 inner =》 outer => box
*/
// inner.onclick = function(ev){
// console.log('inner=>',ev);
// }
// outer.onclick = function(ev){
// console.log('outer=>',ev);
// }
// box.onclick = function(ev){
// console.log('box=>',ev);
// }
// document.body.onclick = function(ev){
// console.log('body=>',ev);
// }
/**
* DOM 2级 绑定中给元素事件绑定的方法, 都是在捕获阶段触发的
* + 默认是 false 冒泡阶段触发 从里 往外 inner =》 outer => box
* + 设置为true 捕获阶段触发 从外 往里 box =》 outer => inner
*/
// inner.addEventListener('click',function(ev){
// console.log('inner=>',ev);
// },true)
// outer.addEventListener('click',function(ev){
// console.log('outer=>',ev);
// },true)
// box.addEventListener('click',function(ev){
// console.log('box=>',ev);
// },true)
// inner.onclick = function(ev){
// //阻止冒泡
// // ev.stopPropagation ? ev.stopPropagation() : ev.cancelBubble();
// ev.stopPropagation();
// console.log('inner=>',ev);
// }
// outer.onclick = function(ev){
// ev.stopPropagation();
// console.log('outer=>',ev);
// }
// box.onclick = function(ev){
// ev.stopPropagation();
// console.log('box=>',ev);
// }
// document.body.onclick = function(ev){
// ev.stopPropagation();
// console.log('body=>',ev);
// }
// --------------------------------------------------
/**
* 因为点击事件行为存在冒泡传播机制,所以不论点击 box、outer、inner,最后都会
* 传递到 body 上, 触发body的 click 点击事件行为,把为其绑定的方法执行
*
* 在方法执行接收到的事件对象中,有一个 target/srcElement属性(事件源),可以知道当前点击的是谁,此时
* 方法中 可以根据事件源的不同,做不同的处理
* 这就是 “事件委托/事件代理”: 利用事件的冒泡传播机制,可以把一个容器中所有后代元素的某个
* 事件行为触发要做的操作,委托给当前容器的某个事件行为,后期只要触发任意后代元素,在方法执行的时候,
* 基于事件源 做不同的处理
* + 性能高
* + 可以操作动态绑定的元素
* + 某些需求必须基于它完成
* + ...
* */
document.body.onclick = function(ev){
// console.log(ev);
let target = ev.target,
tgrgetClass = target.className;
// console.log(tgrgetClass); // inner
if(tgrgetClass === "inner"){
console.log('inner');
return;
}else if(tgrgetClass === "outer"){
console.log('outer');
return;
}else if(tgrgetClass === "box"){
console.log('box');
return;
}
}
</script>
</body>
</html>
我是Eric,手机号是13522679763
原文地址:https://www.cnblogs.com/eric-share/p/15078978.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PAT (Basic Level) Practice (中文)1086 就不告诉你
- PAT (Basic Level) Practice (中文)1061 判断题
- 使用IDEA写Python之pytest环境搭建及第一个程序编写
- PAT (Basic Level) Practice (中文)1026 程序运行时间
- PAT (Basic Level) Practice (中文)1091 N-自守数
- PAT (Basic Level) Practice (中文)1007 素数对猜想
- PAT (Basic Level) Practice (中文)1019 数字黑洞
- PAT (Basic Level) Practice (中文)1022 D进制的A+B
- 记一次线上商城系统高并发的优化
- 15个必须知道的JavaScript数组方法
- RedLock究竟是不是Redis分布式锁分布式环境下的银弹?
- PAT (Basic Level) Practice (中文)1023 组个最小数
- PAT (Basic Level) Practice (中文)1041 考试座位号
- PAT (Basic Level) Practice (中文)1042 字符统计
- 搭建 Apache Jmeter 分布式压测与监控,真那么难搞定?|实战干货