DOM事件委托、动态渲染页面流程
事件委托解释
- 优点
- 减少事件的注册,只需要注册化父容器
- 可以为已存在和未来的元素注册事件,注册一次,现在未来通用
- 原理:
- 利用冒泡
- 使用场景:动态的渲染的元素的事件注册使用委托,动态渲染的元素的事件只能使用委托
捕获阶段和冒泡阶段说明
- 事件捕获
- 概念: 从DOM的根元素开始去执行对应的事件 (从外到里)
- 捕获机制必须使用事件监听的形式注册
- DOM.addEventListener(事件类型, 事件处理函数, 是否使用捕获机制)
- 第三个参数为true:捕获阶段触发事件
- false代表冒泡阶段触发事件-默认值
- 事件冒泡
- 概念: 当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中依次被触发。这一过程被称为事件冒泡
- 事件冒泡的必要性
- 如果没有冒泡.给大盒子注册点击事件, 点击的是里面的小盒子,会导致大盒子的点击无法执行
- 事件委托
- 自己不注册事件,将对应的事件注册给祖先元素
- 减少事件的注册,提高效率
e.target =>当前点击的那个元素
- 阻止事件冒泡
- 先要明确那一块区域不能冒泡
- 需要阻止什么事件传递就给这块区域的最大盒子注册该事件
- 在事件处理函数里面接受事件对象, 并添加上
e.stopPropagation()
渲染页面流程
前提:渲染必须需要 数据 和 静态结构
- 准备数据
- 一般是后台传输过来
- 准备好静态结构
- 静态结构包括HTML结构和CSS样式
- 数据一般是对象数组(数组里面的每个元素都是对象),所以需要遍历拼接
- 要将数据放进结构中所以需要拼接
- 定义一个字符串用于拼接
- 一般可以定义一个空字符串
let string = ''的这种形式
- 一般可以定义一个空字符串
- 使用某种循环遍历数据源
- 利用for循环可以遍历数据源,获取到全部数据,存储在你定义的字符串里
- 拼接字符串,将数据进行替换
- 将要更改的数据以'${数组的某一项.属性}'这种形式放入结构中
- 将拼接生成好的结构渲染到指定位置
- 将拼接好的字符串以inner的形式放回指定位置,就能看到渲染出来的数据结构
格式例如下图:
- 将拼接好的字符串以inner的形式放回指定位置,就能看到渲染出来的数据结构
效果图如下:
实现动态加减数量,删除商品等功能,同时计算总数
代码功能如下:
数据驱动视图,双向数据绑定
- 元素操作一定要体现到数据,数据操作也要体现到元素
- 元素操作一定要体现到数据,用户操作是的界面元素,但是本质 上操作数据
- 这点和vue的数据驱动视图,双向数据绑定其实原理是一样的。
以上内容属于个人对于事件委托和动态渲染页面的一些见解,没有深层次的进行剖析,如有不正之处,欢迎大家指正交流,大家一起交流学习