Задать вопрос
werber
@werber
Системный администратор Windows

Как выполнить метод после пересборки DOM?

Добавил на сайт для фонового воспроизведения плагин YTPlayer. Добавил так же на сайт для всплывающих окон плагин Custombox, который при работе с ним переносит весь HTML код внутрь собственно созданного контейнера, а когда он уже не требуется - возвращает код обратно, как было. Таким образом меняется DOM страницы. Естественно, я понимаю, что в таком случае нужно пользоваться обработкой событий через .on. Я добавил для фонового видео переключатель звука (вкл и выкл). Он, по факту, вызывается так:
$(document).on("click","#volume",function(){});
По такому событию клика видео всегда можно заглушить или наоборот, включить звук.
Теперь же рассмотрим основную проблему. Как я писал выше, модальное окно Custombox меняет всю DOM структуру при работе с ним. У меня стоит задача - после закрытия Custombox (а значит и перезагрузки видео) обратиться этому видео и повторно напомнить ему, что звук должен быть включен или выключен. Делается это у YTPlayer так (пример выключения звука):
$("#video").YTPMute();
То есть, вызывается метод YTPMute, который для объекта $("#video") заглушает звук. Но! Если DOM изменён, то так обрашаться к нему бессмысленно. Он просто не реагирует. Как инчае вызывать метод объекта, который находится в изменённом DOM-е?

Если что, вот реальный проект, в котором встречается ошибка. Я там написал кучу консольных комментариев в файле с основным кодом, чтобы следить чуть ли не за каждым шагом для смены состояния звука. Важнее всего обратить внимание на функцию PostVideo (53 строка), в которой проверяется состояние переменной video_vol_state (on или off), и в зависимости от значения, вызывается либо YTPMute, либо YTPUnmute. Проблема просто в том, что это не работает. Не хочет, хоть ты тресни!
Попробуйте перейти к видеоблоку, нажмите на "I", появится форма. В этой форме что-нибудь напишите, чтобы получилось отправить эти данные, и, собственно, нажмите на заказ обратного звонка. После смотрите внимательно в консоль. Там два однаразовых таймера. Первый через 5 секунд включает заново видео, ибо Custombox останавливает его + нужно время на показ текста об успешности отправки данных. Далее уже срабатывает через 7 секунд второй одноразовый таймер, который, по факту, ждёт 7 секунд (заранее завышенное, чтобы наверняка попасть на момент где слышен звук), чтобы уже у запустившегося видео выключить звук, если он включён. А он включён по умолчанию, как я понял. Это и бесит.
  • Вопрос задан
  • 246 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
werber
@werber Автор вопроса
Системный администратор Windows
Проблему поборол тем, что вызывал через триггер функцию обработки щелчка по кнопки вкл/выкл звука.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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