⭐️ 更多前端技术和知识点,搜索订阅号
JS 菌
订阅
load、unload 这些资源加载的事件不冒牌也是容易理解🤐html
事件触发顺序见下表:前端
Event Type | Notes |
---|---|
User shifts focus | |
focusin | 第一个目标元素得到焦点以前触发 |
focus | 第一个目标元素得到焦点以后触发 |
User shifts focus | |
focusout | 第一个目标元素失去焦点以前触发 |
focusin | 第二个目标元素得到焦点以前触发 |
blur | 第一个目标元素失去焦点以后触发 |
focus | 第二个元素得到焦点以后触发 |
要注意 blur 事件和 focus 事件都是不冒泡的,因获取和失去焦点自己就是针对这个元素的。若是要坚挺具体的焦点变化状况,那么应该使用 focusin 和 focusouthtml5
若是元素内部没有嵌套另外一个元素,事件触发的顺序见下表:异步
Event Type | Element | Notes |
---|---|---|
mousemove | ||
移动到元素A | ||
mouseover | A | |
mouseenter | A | |
mousemove | A | Multiple mousemove events |
移出元素A | ||
mouseout | A | |
mouseleave | A |
若是元素A内部嵌套了元素B,事件触发顺序见下表:编辑器
Event Type | Element | Notes |
---|---|---|
mousemove | ||
移动到元素A | ||
mouseover | A | |
mouseenter | A | |
mousemove | A | Multiple mousemove events |
移动到内嵌元素B | ||
mouseout | A | |
mouseover | B | |
mouseenter | B | |
mousemove | B | Multiple mousemove events |
从新移动到A | ||
mouseout | B | |
mouseleave | B | |
mouseover | A | |
mousemove | A | Multiple mousemove events |
移出元素A | ||
mouseout | A | |
mouseleave | A |
若是是下图所示spa
直接移动到元素C,常见于失去焦点再得到焦点的状况,事件触发顺序见下表:code
Event Type | Element | Notes |
---|---|---|
mousemove | ||
直接移动到元素C | ||
mouseover | C | |
mouseenter | A | |
mouseenter | B | |
mouseenter | C | |
mousemove | C | Multiple mousemove events |
直接移出元素 C... | ||
mouseout | C | |
mouseleave | C | |
mouseleave | B | |
mouseleave | A |
能够看到 mouseover/mouseout 事件只触发一次,mouseenter/mouseleave 事件触发了三次htm
而后再看下 click 元素blog
Event Type | Notes |
---|---|
mousedown | |
mousemove | OPTIONAL, multiple events, some limits |
mouseup | |
click | |
mousemove | OPTIONAL, multiple events, some limits |
mousedown | |
mousemove | OPTIONAL, multiple events, some limits |
mouseup | |
click | |
dblclick |
Mouse 事件中有两个不冒泡事件:seo
mouseenter/mouseleave 看这个单词也是跟 focusin/focusout 同样专一于变化,所以这两个不冒泡的事件和 focus 事件做对比也容易理解 🌞
wheel 事件是冒泡事件
事件触发顺序是 beforeinput,而后是 input,二者都是冒泡事件
首先触发 keydown 事件,而后是 beforeinput、input,最后是 keyup;若是长时间按住不放,那么则是 keydown 事件、beforeinput 事件和 input 事件
Keyboard 所有是冒泡事件
该事件是复合事件,用来处理输入法编辑器的输入。
该事件包括三个:
⚠️ 须要注意的是,三个事件中只有第一个 compositionstart 事件是 cancelable 的,而且三个事件都是冒泡事件
除此以外,还有监听 Node 节点插入移除事件也是不冒泡事件
另外,html 中表单验证合法性 invalid 事件也是不冒泡的
indexedDB 中的一系列事件也都是不冒泡的,除了 abort 事件
html5 的媒体事件 media Event 也都是不冒泡的
html5 的 online offline、notification、push 等事件也都是不冒泡的;针对特定资源的 Progress 事件如 abort、load、progress、timeout 等等都是不冒泡的
针对特定选区的 selection API 的相关事件 selectionchange 是不冒泡的:
SSE 的相关事件也是不冒泡的
html5 的 drag & drop 或 touch 事件则是冒泡的
请关注个人订阅号,不按期推送有关 JS 的技术文章,只谈技术不谈八卦 😊