事件属性 charCode / keyCode
onkeydown: e.keyCode 有值
onkeyup: e.keyCode 有值
onkeypress: e.keyCode 为0
charCode是字符码
keyCode是机器码 不分大小写 因为大小写在键盘上是同一个按钮
阻止事件传播& 阻止默认event
通过e.stopPropagation() 阻止传播
通过 e.preventDefault 阻止原来的event
事件传播
- 事件捕获 addEventListener() 第三个参数是true代表捕获事件 false代表监听事件 2级事件 从外到内
- 事件冒泡 onclick 0级事件 从内到外
- 区别 : 方向不同 ; 0级会产生覆盖行为 2级不会产生覆盖 会将所有的事件都记录。
- 阻止时间传播 包括 冒泡和捕获 都可以用 e.stopPropagation()
事件委托
使用场景 不用会有那些缺陷
批量添加事件监听的问题如下:
- 新增元素必须分别添加时间监听,不能自动获取事件监听
- 大量事件监听,大量事件处理函数都会产生大量的内存消耗。
使用机制 必须用在可以冒泡的时间上, 核心是DOM可以获取触发此事件最早的元素
机制:利用事件冒泡机制,将后代元素事件未退给祖先事件
通过e.target获取触发此事件的最早元素。
e.currentTarget == this 事件处理程序需要附加到的元素。
注意事项 不能传递给不能冒泡的event
两个都是进入的鼠标事件:
document.onmouseenter 不冒泡 不能用事件委托
document.onmouseover 冒泡
note ! 不能在内层再添加内层元素了,否则最早触发的元素就变成添加的最内层的元素
<ul>
<li><span>新增的内层元素</span></li>
<li><span>新增的内层元素</span></li>
<li><span>新增的内层元素</span></li>
</ul>
延时器 和定时器
定时器 时间是毫秒 循环执行
clearInterval 为了防止定时器叠加,可以在新建之前先清除定时器
setInterval可以传递多个参数,从第三个参数开始,这些参数都是需要传递给第一个函数的形参。