Я использую jQuery на своем сайте, и я хотел бы вызвать определенные действия, когда определенный div становится видимым.
Можно ли присоединить какой-то «видимый» обработчик событий к произвольным элементам div и запускать определенный код, когда элемент div становится видимым?
Я хотел бы что-то вроде следующего псевдокода:
$(function() {
$('#contentDiv').isvisible(function() {
alert("do something");
});
});
Код предупреждения («сделать что-то») не должен запускаться до тех пор, пока contentDiv фактически не станет видимым.
Спасибо.
javascript
jquery
frankadelic
источник
источник
Ответы:
Вы всегда можете добавить к исходному методу .show (), чтобы вам не приходилось инициировать события каждый раз, когда вы что-то показываете, или если вам это нужно для работы с унаследованным кодом:
Расширение Jquery:
Пример использования:
Это эффективно позволяет вам что-то делать beforeShow и afterShow, в то же время выполняя обычное поведение исходного метода .show ().
Вы также можете создать другой метод, чтобы вам не приходилось переопределять исходный метод .show ().
источник
fadeTo
функция не работает должным образом после реализации этой функцииПроблема решается наблюдателями мутации DOM . Они позволяют привязать наблюдателя (функцию) к событиям изменения содержимого, текста или атрибутов элементов dom.
С выпуском IE11 все основные браузеры поддерживают эту функцию, проверьте http://caniuse.com/mutationobserver
Пример кода следующий:
источник
Для этого нет встроенного события, которое вы можете подключить, однако вы можете вызвать событие из вашего скрипта после того, как сделали div видимым с помощью. триггерная функция
например
источник
show()
вызывается из нескольких мест, кроме блока кода, описанного выше?onIsVisible
потому что использование isVisible сейчас немного неоднозначно.Вы можете использовать плагин Live Query от jQuery . И напишите код следующим образом:
Тогда каждый раз, когда contentDiv виден, «делать что-то» будет предупреждено!
источник
Решение RedSquare является правильным ответом.
Но в качестве решения IN-THEORY вы можете написать функцию, которая выбирает классифицируемые элементы
.visibilityCheck
( не все видимые элементы ) и проверяетvisibility
значение их свойств; если что-true
то сделаешьПосле этого функция должна периодически выполняться с использованием этой
setInterval()
функции. Вы можете остановить таймер, используяclearInterval()
после успешного вызова.Вот пример:
Вы также можете выполнить некоторые улучшения производительности, однако решение в принципе абсурдно использовать в действии. Так...
источник
display:none
?Следующий код (взятый из http://maximeparmentier.com/2012/11/06/bind-show-hide-events-with-jquery/ ) позволит вам использовать
$('#someDiv').on('show', someFunc);
.источник
el.apply(this, arguments)
чтобы исправить это.Если вы хотите вызвать событие на всех элементах (и дочерних элементах), которые фактически становятся видимыми, с помощью $ .show, toggle, toggleClass, addClass или removeClass:
А теперь ваша стихия:
Вы можете добавить переопределения к дополнительным функциям jQuery, добавив их в массив сверху (например, «attr»)
источник
триггер события скрытия / показа, основанный на Glenns ideea: удаленный переключатель, потому что он запускает шоу / скрытие, и мы не хотим 2 огня для одного события
источник
У меня была такая же проблема, и я создал плагин jQuery, чтобы решить ее для нашего сайта.
https://github.com/shaunbowe/jquery.visibilityChanged
Вот как вы могли бы использовать его на основе вашего примера:
источник
Используйте jQuery Waypoints:
Другие примеры на сайте jQuery Waypoints .
источник
Что мне помогло, так это недавняя спецификация ResizeObserver :
Обратите внимание, что это кроссбраузер и производительность (без опроса).
источник
Я сделал простую функцию setinterval для достижения этой цели. Если элемент с классом div1 видим, он устанавливает div2 как видимый. Я знаю не хороший метод, но простое решение.
источник
Вы также можете попробовать подключаемый модуль jQuery, как указано в параллельном потоке https://stackoverflow.com/a/3535028/741782
источник
Эта поддержка облегчает и запускает событие после анимации! [протестировано на jQuery 2.2.4]
Вдохновленный http://viralpatel.net/blogs/jquery-trigger-custom-event-show-hide-element/
источник
Просто свяжите триггер с помощью селектора и поместите код в событие триггера:
источник
Существует плагин jQuery для наблюдения за изменениями в атрибутах DOM,
https://github.com/darcyclarke/jQuery-Watch-Plugin
Плагин оборачивает все, что вам нужно сделать, это привязать MutationObserver
Затем вы можете использовать его для просмотра div, используя:
источник
Надеюсь, что это сделает работу самым простым способом:
источник
Я изменил триггер скрытия / показа событий от Catalint, основываясь на идее Гленса. Моя проблема была в том, что у меня есть модульное приложение. Я переключаюсь между модулями, показывающими и скрывающими родителей. Затем, когда я прячу модуль и показываю другой, с его методом у меня появляется видимая задержка при переключении между модулями. Мне нужно только иногда освещать это событие, а у некоторых особенных детей. Поэтому я решил уведомить только детей с классом "displayObserver"
Затем, когда ребенок хочет прослушать событие «show» или «hide», я должен добавить ему класс «displayObserver», а когда он не хочет продолжать его слушать, я удаляю его класс
Я хочу помочь
источник
Один из способов сделать это.
Работает только на изменениях видимости, которые сделаны изменением класса css, но могут быть расширены, чтобы наблюдать за изменениями атрибута также.
источник
мое решение:
пример использования:
источник
источник
Этот код автоматического управления не требуется запрос видимого или невидимого элемента управления
источник