Можно ли сделать так, чтоб событие onScroll происходило для конкретного элемента?

По событию onMouseOver на элементе elem происходит вызов функции, которая выполняет действие и устанавливает флаг elem.flag_done = true, который говорит, что больше действие при наведении курсора делать не надо. Но при изменении позиции элемента elem посредством прокрутки страницы флаг elem.flag_done надо сбросить, чтоб действие при onMouseOver снова выполнилось.

Проблема в том, что таких элементов elem может не быть на странице, а может быть несколько. Затруднительно все их заранее предусмотреть в переопределенной window.onscroll = function() {...}. Нельзя ли сделать так, чтоб событие при изменении позиции элемента вызывалось самим элементом?
  • Вопрос задан
  • 381 просмотр
Пригласить эксперта
Ответы на вопрос 1
sfi0zy
@sfi0zy Куратор тега JavaScript
Creative frontend developer
Нельзя. Тут дело в том, что на одно событие можно повесить только один обработчик. Нельзя повесить на window.onscroll несколько обработчиков - второй и последующие будут проигнорированы. Можно с помощью getBoundingClientRect() находить положение элемента относительно экрана, и постоянно (раз в какое-то время) проверять для каждого элемента не изменилось ли его положение - codepen. Но, по всей видимости, это не очень хорошая идея с точки зрения производительности. Лучшей идеей кажется создать наблюдателя, к которому вы будете добавлять ваши элементы, а он будет слушать window.onscroll и сообщать о событии вашим элементам.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы