MaKvc
@MaKvc
Отчаянный веб-разработчик

Как определить изменение состояния видимости элемента?

Допустим, есть у нас модельное окно которое естественно скрыто черед свойство display. В модельном окне, есть некая панель, в панели имеется выпадающий список который тоже скрыт через свойство display. В этом меню есть компонент который использует функции по типу getBoundingClientRect, getComputedStyle и т.д. и т.п. Вопрос, как можно подписаться на событие при котором модальное окно как и вып. список открыты? То есть, все родительские элементы как и сам конечный элемент видны. Есть ли способ запускать код всякий раз когда элемент становится видимым?

ПС: Структура только для примера!!! Вложенность может быть произвольной.
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
Mike_Ro
@Mike_Ro Куратор тега JavaScript
Python, JS, WordPress, SEO, Bots, Adversting
Расширю ответ imko кодом:
// return true, if element visible
function isVisible(element) {
  return window.getComputedStyle(element).display !== 'none';
}

// MutationObserver
const observer = new MutationObserver((mutations, obs) => {
  const modal = document.querySelector('#modalWindow'); // modal selector
  const dropdown = document.querySelector('#dropdownMenu'); // dropdown menu selector

  // check is visible?
  if (isVisible(modal) && isVisible(dropdown)) {
    console.log('Element is visible');
    obs.disconnect();
  }
});

// config
const config = {
  attributes: true,
  attributeFilter: ['style']
}

// run
observer.observe(document.querySelector('#modalWindow'), config);
observer.observe(document.querySelector('#dropdownMenu'), config);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы