在JavaScript中处理事件的优先顺序是什么?
以下是按字母顺序排列的事件......
他们从事件队列中处理了什么顺序?
优先级不是先进先出(FIFO),所以我相信。
答案 0 :(得分:34)
据我所知,这不是过去明确定义的。不同的浏览器可以自由地实现事件排序,但他们认为合适。虽然大多数都足够接近所有实际目的,但是一直存在并且仍然存在一些奇怪的边缘情况,其中浏览器有所不同(当然,在某些浏览器无法发送某些事件的情况下更多> )。
尽管如此,HTML 5 draft recommendation确实尝试指定事件将如何排队和发送 - the event loop:
协调事件,用户 交互,脚本,渲染, 网络,等等,用户代理 必须使用事件循环,如中所述 这部分。
必须至少有一个事件循环 每个用户代理,最多一个事件 每单位相关的循环 类似来源的浏览环境。
事件循环有一个或多个任务 队列。任务队列是有序的 任务清单[...] 当用户代理要排队任务时, 它必须将给定的任务添加到其中一个 相关事件的任务队列 环。所有任务都来自一个 特定任务源必须始终如一 添加到同一个任务队列,但是 来自不同任务源的任务可能 被放置在不同的任务队列中。 [...]
[...]用户代理可以有一个任务队列 用于鼠标和键事件(用户 交互任务源),另一个 其他一切。用户代理 然后可以给键盘和鼠标 事件偏好优于其他任务 四分之三的时间,保持 界面响应但不是 饿死其他任务队列,永远不会 处理来自任何一项任务的事件 来源无序。 [...]
请注意最后一位:由浏览器实现决定哪些事件将按顺序组合在一起并按顺序处理,以及给予任何特定类型事件的优先级。因此,没有理由期望所有浏览器现在或将来以固定顺序发送所有事件。
答案 1 :(得分:16)
对于想要了解调用序列相对事件的人,请参阅下文。到目前为止,我只在Chrome中测试过。
答案 2 :(得分:4)
如果您正在观看鼠标/触摸事件,Patrick H. Lauke已发布a talk on the subject。绝对是一个有趣的阅读 - 并处理不同浏览器,不同设备和不同标准的所有怪癖。