- 后代元素把事件委托给祖先元素,但是必须要明确是哪个后代
- ul > li
新添加的元素事件不容易添加
事件委托能提升代码的性能
- let ulEl = document.querySelector("ul");
-
- ulEl.addEventListener("click", function (ev) {
-
- // 点击 ul 的徒子徒孙都会触发 ul 的点击事件
-
- if (ev.target.classList.xxx) {
-
- // 执行相应逻辑;
-
- }
-
- });
阻止冒泡是就让事件不再从子级向父级【传播】
在事件回调函数中通过 ev.stopPropagation()
一些标签自带了某些功能,比较典型的两个:a 标签 和 form 标签
事件回调中的 ev.preventDefault()
扩展:如果在 a 中看到了 <a href="javascript: ;">删除</a>
含义是不想让 a 去跳转
scroll 事件与 click input change keyup 等,没有什么本质上的区别。
- 页面的 document.addEventListener('scroll', function ( ) { })
- 盒子的 盒子DOM.addEventListener('scroll', function ( ) { })
- 注:当滚动事件发生时,一般是给某个父盒子进行监听。
load 事件与 click input change keyup 等,没有什么本质上的区别。
window.addEventListener("load", function () {});
offsetWidth、offsetHeight 大小的确定 width + padding + border
offsetLeft、offsetTop 位置的确定与定位有关(参照谁进行定位,位置就参照谁)
- 如果盒子的所有祖先都没有定位,那么参照页面
clientWidth、clienttHeight 大小的确定 width + padding - 滚动条宽度
clientLeft、clientTop 实际就是边框的宽度
只有盒子或页面发生滚动时它才有意义,如果没有滚动我们永远不会使用它。
scrollWidth、scrollHeight 大小的确定取决滚动内容的大小
scrollTop、scrollLeft 是指页面或盒子滚动的距离