Приоритет события DOM
-
08-07-2019 - |
Вопрос
В каком порядке приоритета обрабатываются события в JavaScript?
Вот события в алфавитном порядке ...
<Ол>В каком порядке они обрабатываются в очереди событий?
Приоритет - не «первым пришел - первым обслужен» (FIFO), или я так считаю.
Решение
Насколько я знаю, это не было явно определено в прошлом. Различные браузеры могут свободно упорядочивать события по своему усмотрению. Хотя большинство из них достаточно близки для всех практических целей, были и остаются некоторые странные случаи, когда браузеры несколько различаются (и, конечно, еще много случаев, когда определенные браузеры вообще не могут отправлять определенные события вообще ).
Тем не менее, черновой вариант рекомендации HTML 5 пытается указать, как события будут помещаться в очередь и отправляться - цикл событий :
Для координации событий пользователь взаимодействие, скрипты, рендеринг, сеть и т. д., пользовательские агенты должны использовать циклы событий, как описано в этот раздел.
Должен быть хотя бы один цикл событий за агента пользователя и самое большее одно событие цикл на единицу связанных контексты просмотра схожего происхождения.
Цикл событий имеет одну или несколько задач Очереди. Очередь заданий упорядочена список задач [...] Когда пользовательский агент ставит задачу в очередь, он должен добавить задание к одному из очереди задач соответствующего события петля. Все задания от одного конкретный источник задачи всегда должен быть добавлен в ту же очередь задач, но задачи из разных источников задач могут помещаться в разные очереди задач. [...]
[...] пользовательский агент может иметь одну очередь задач для мыши и ключевых событий (пользователь источник задачи взаимодействия) и другое для всего остального. Пользовательский агент мог тогда дать клавиатуру и мышь предпочтение событий перед другими задачами три четверти времени, сохраняя интерфейс отзывчивый но не голодание других очередей задач, и никогда обработка событий из любой задачи источник вышел из строя. [...]
Обратите внимание, что последний бит: это зависит от реализации браузера, чтобы определить, какие события будут сгруппированы и обработаны по порядку, а также приоритет, отданный любому конкретному типу события. Поэтому нет оснований ожидать, что все браузеры будут отправлять все события в фиксированном порядке, сейчас или в будущем.
Другие советы
Для тех, кто хочет знать последовательность относительных событий, см. ниже. Пока что я тестировал только в Chrome.
<Ол>Если вы смотрите на события мыши / касания, Патрик Х. Лаук опубликовал доклад. на эту тему . Определенно интересное чтение & # 8211; и имеет дело со всеми причудами разных браузеров, разных устройств и разных стандартов.
Он также связывает полный набор тестов .