Ответ 1
document
и window
- разные объекты, и у них есть разные события. Используя addEventListener()
, они прослушивают события, предназначенные для другого объекта. Вы должны использовать тот, который на самом деле имеет интересующее вас событие.
Например, есть событие "resize"
в объекте window
, который не находится в объекте document
.
Например, событие "DOMContentLoaded"
относится только к объекту document
.
Итак, в принципе, вам нужно знать, какой объект получает интересующее вас событие и использовать .addEventListener()
для этого конкретного объекта.
Здесь интересная диаграмма, показывающая, какие типы объектов создают типы событий: https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference
Если вы слушаете распространенное событие (например, событие click), вы можете прослушивать это событие как для объекта документа, так и для объекта окна. Единственное основное различие для распространенных событий - это время. Событие попадет в объект document
перед объектом window
, поскольку оно происходит сначала в иерархии, но эта разница обычно несущественна, поэтому вы можете выбрать ее. Я считаю, что лучше всего выбрать ближайший объект к источнику события, который соответствует вашим потребностям при обработке распространенных событий. Это предполагает, что вы выбираете document
над window
, когда либо будет работать. Но я бы часто двигался еще ближе к источнику и использовал document.body
или даже приблизительный общий родительский элемент в документе (если это возможно).