事件流
事件冒泡:事件从最具体的元素(文档树中最深的节点)开始触发,然后向上(父元素)传播至最外层元素(文档)。
事件捕获:最外层的元素最先收到事件,而目标元素节点则最后收到事件。
Dom事件流
事件流分为三个阶段:事件捕获 、到达目标和事件冒泡。事件捕获最先发生,为提前拦截事件提供了可能,然后目标元素接收事件,最后是冒泡,最迟要在冒泡阶段响应事件。
默认情况下事件捕获阶段并不会触发事件。
事件对象
在DOM中发生事件时,所有的相关信息都会被收集并存储在一个名为event的对象中,其中包含了比如导致事件的元素、发生的事件类型,以及可能与特定事件相关的任何其他数据。
let btn=document.getElementById("btn");
btn.onclick=function(event){
console.log(event.type)//"click"
}
btn.addEventListener("click",(event)=>{
console.log(event.type)//"click"
}
事件对象中都会包含以下这些公共属性和方法。
事件类型
用户界面常用事件:
- load事件:load事件在整个页面加载完成后触发。
- unload事件:unload事件会在文档卸载完成后触发。一般是在从一个页面到另一个页面时触发,常用于清理引用,以避免内存泄漏。
- resize事件:resize事件当浏览器窗口被缩放到新高度或宽度时触发。
- scroll事件:当用户滚动包含滚动条的元素是在元素上触发
焦点常用事件:
- blur:当元素失去焦点时触发。(这个事件不冒泡)
- focusout:当元素失去焦点时触发。
- focus:当元素获得焦点时触发。(不冒泡)
- focusin:当元素获得焦点时触发。
鼠标常用事件:
- click:单击鼠标主键或按键盘回车键时触发。
- dblclick:双击鼠标主键时触发。
- mousedown:按下任意鼠标键时触发。
- mouseenter:鼠标从元素外部进入元素内部时触发。
- mouseleave:鼠标从元素内部移动到元素外部时触发。
- mousemove:鼠标在元素内部移动时反复触发。
- mouseout:鼠标从一个元素移动到另一个元素时触发。
键盘与输入事件:
- keydown:用户按下某个键时触发,并且持续按住会反复触发。。
- keypress:用户按下某个键并产生字符时触发,并且持续按住会反复触发。
- keyup:用户释放某个键时触发。
键码: