Как запустить jQuery после события $(window).on('load')

15 февр. 2018 г., 18:08:59
Просмотры: 7.23K
Голосов: 0

У меня есть страница WordPress, созданная с помощью конструктора Elementor, на которой я отображаю 'флипбуки' (просмотрщики PDF) с использованием плагина Responsive Flipbooks. Флипбуки становятся адаптивными благодаря JavaScript-функции, которая изменяет их размер при изменении размера окна браузера (не знаю почему, но это не мой плагин).

Проблема в том, что книги отображаются в своем минимальном размере, и плагин запускает jQuery(window).trigger('rfbwp.resize'); при загрузке страницы, чтобы инициировать изменение размера для соответствия текущему окну. Однако это не работает в некоторых браузерах (по крайней мере в Safari и Chrome на моем Mac), из-за чего они остаются маленькими. Я обнаружил, что если поместить эту строку кода в событие $(window).on('scroll'), книги идеально меняют размер при прокрутке. Конечно, они также изменяются при фактическом изменении размера страницы, однако это не работает, если я помещаю этот код в событие $(window).on('load').

Это заставляет меня думать, что элементы еще не были полностью загружены, когда срабатывает это событие, что странно, потому что я думал, что событие загрузки окна срабатывает последним.

Может ли это быть связано с тем, как WordPress строит страницу, учитывая, что все компоненты поставляются со своими собственными скриптами? Верно ли, что $(window).on('load') срабатывает последним - даже на сложной странице WordPress?

Соответствующая страница доступна по адресу http://cdgstyle.mixrabbit.com/lookbook/

2
Комментарии

Мне не кажется, что это вопрос, специфичный для WordPress. То, что ваш сайт работает на WP, не делает вопрос WP-вопросом. Если «взлом плагина» решает проблему, я бы спросил об этом автора плагина.

Beee Beee
16 февр. 2018 г. 00:07:44

Мне показалось, что это специфичный для WordPress вопрос, поскольку обычно понятно, что $(window).on('load') выполняется последним, и я не вижу причин, почему это не должно работать. Поскольку WordPress загружает множество плагинов, каждый из которых запускает свои скрипты, я подумал, что причина может быть в том, как WordPress строит страницу. Но действительно, я не указал это явно в своем вопросе, так что я его отредактирую.

Rob Teeuwen Rob Teeuwen
16 февр. 2018 г. 11:53:19
Все ответы на вопрос 1
0

Скорее всего, это не связано с ядром WordPress - в большинстве случаев подобные проблемы возникают из-за конфликтов плагинов. Я бы рекомендовал отключить все другие плагины и попробовать стандартную тему, например Twenty Seventeen. Если после этого всё заработает, можно включить тему и проверить, а затем активировать плагины по одному с проверкой, чтобы найти конфликтующий плагин. После этого стоит сообщить об этом разработчику плагина, чтобы он мог найти решение.

Если при использовании стандартной темы и только этого плагина проблема сохраняется, вот два варианта замены для $(window).on('load'):

jQuery(window).load(function($) {
   // ваш код
});

Или более кратко:

(function($) {
  // ваш код
})(jQuery);

WordPress использует jQuery в режиме no conflict, поэтому проблема может быть просто в синтаксисе $. Если это исправит ситуацию, часто быстрее всего отправить pull request в репозиторий плагина, чтобы стимулировать разработчика к действию.

16 февр. 2018 г. 17:33:02