Я создаю панель инструментов, которая будет включена в страницу. div, в который он будет включен, по умолчанию будет отображать: none . Есть ли способ разместить прослушиватель событий на моей панели инструментов, чтобы отслеживать, когда он становится видимым, чтобы его можно было инициализировать? или мне придется передать ему переменную с содержащей его страницы?
Спасибо
javascript
Джей Ди Айзекс
источник
источник
Ответы:
События Javascript имеют дело с взаимодействием с пользователем , если ваш код достаточно организован, вы должны иметь возможность вызывать функцию инициализации в том же месте, где изменяется видимость (т.е. вы не должны изменять
myElement.style.display
во многих местах, вместо этого вызывайте функцию / метод, это и все, что вам может понадобиться).источник
Забегая вперед, вам нужен новый HTML Intersection Observer API. Он позволяет вам настроить обратный вызов, который вызывается всякий раз, когда один элемент, называемый целью, пересекает либо область просмотра устройства, либо указанный элемент. Он доступен в последних версиях Chrome, Firefox и Edge. См. Https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API для получения дополнительной информации.
Пример простого кода для наблюдения за дисплеем: переключение отсутствует:
В действии: https://jsfiddle.net/elmarj/u35tez5n/5/
источник
Я могу немного опоздать, но вы можете просто использовать MutationObserver, чтобы наблюдать за любыми изменениями в желаемом элементе. Если произойдет какое-либо изменение, вам просто нужно будет проверить, отображается ли элемент.
источник
IntersectionObserver
- stackoverflow.com/a/52627221/2803743Есть хоть один способ, но он не очень удачный. Вы можете просто опросить элемент на предмет таких изменений:
Стандарт DOM также определяет события мутации , но у меня никогда не было возможности их использовать, и я не уверен, насколько хорошо они поддерживаются. Вы бы использовали их так:
Этот код не у меня в голове, поэтому я не уверен, что он сработает.
Лучшее и самое простое решение будет иметь функцию обратного вызова в функции отображаются ваши цели.
источник
У меня была такая же проблема, и я создал плагин jQuery, чтобы решить ее для нашего сайта.
https://github.com/shaunbowe/jquery.visibilityChanged
Вот как вы бы использовали его на своем примере:
источник
.is(':visible')
вместе сsetTimeout
.Как говорит @figha, если это ваша собственная веб-страница , вы должны просто запустить все, что вам нужно, после того, как вы сделаете элемент видимым.
Однако в целях ответа на вопрос (и для всех, кто создает расширения Chrome или Firefox , где это является обычным вариантом использования), Mutation Summary и Mutation Observer позволят изменениям DOM запускать события.
Например, запуск события для элемента с
data-widget
добавленным атрибутом в DOM. Заимствуя этот отличный пример из блога Дэвида Уолша :Ответы включают
added
,removed
,valueChanged
и многие другие .valueChanged
включает все атрибуты, в том числеdisplay
и т. д.источник
Вы также можете попробовать этот плагин jQuery: https://github.com/morr/jquery.appear
источник
Просто чтобы прокомментировать поддержку браузера прослушивателя событий DOMAttrModified:
Кроссбраузерная поддержка
Эти события не реализуются последовательно в разных браузерах, например:
IE до версии 9 вообще не поддерживал события мутации и не реализует некоторые из них правильно в версии 9 (например, DOMNodeInserted)
WebKit не поддерживает DOMAttrModified (см. Ошибку webkit 8191 и обходной путь)
«события имени мутации», то есть DOMElementNameChanged и DOMAttributeNameChanged, не поддерживаются в Firefox (начиная с версии 11) и, вероятно, в других браузерах.
Источник: https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events
источник
мое решение:
например:
источник