Cómo ejecutar jQuery después de $(window).on('load')

15 feb 2018, 18:08:59
Vistas: 7.23K
Votos: 0

Tengo una página de WordPress construida con el constructor de páginas Elementor en la que muestro 'flipbooks' (visores de PDF) usando un plugin llamado Responsive Flipbooks. Los flipbooks se hacen responsivos mediante una función de JavaScript que los redimensiona cada vez que se cambia el tamaño de la ventana del navegador (no sé por qué, pero no es mi plugin).

El problema es que los libros se renderizan en su tamaño más pequeño, y el plugin ejecuta jQuery(window).trigger('rfbwp.resize'); cuando la página carga, para activar un redimensionamiento y que se ajusten a la ventana actual. Sin embargo, esto parece no funcionar en algunos navegadores (al menos en Safari y Chrome en mi Mac), lo que hace que permanezcan pequeños. Descubrí que cuando pongo esta línea de código dentro de mi evento $(window).on('scroll'), redimensiona perfectamente los libros cada vez que hago scroll. Por supuesto, también se redimensiona cuando cambio el tamaño de la página, pero no funciona cuando pongo esta línea de código dentro de mi evento $(window).on('load').

Esto me hace pensar que los elementos no se han cargado correctamente cuando se dispara este evento, lo cual es extraño, porque pensé que el evento de carga de la ventana se dispara al final.

¿Podría esto tener algo que ver con la forma en que WordPress construye una página, ya que todos los componentes vienen con sus propios scripts? ¿Es el caso que $(window).on('load') se ejecuta último, incluso en una página compleja de WordPress?

La página en cuestión está disponible en http://cdgstyle.mixrabbit.com/lookbook/

2
Comentarios

Esto no me parece una pregunta específica de WordPress. Que tu sitio funcione con WP no lo convierte en una pregunta de WP. Si "hackear el plugin" funciona, le preguntaría al autor del plugin al respecto.

Beee Beee
16 feb 2018 00:07:44

Me pareció una pregunta específica de WordPress, ya que normalmente está claro que un $(window).on('load') es lo último que ocurre, así que no veo por qué no debería funcionar. Como WordPress carga muchos plugins, cada uno ejecutando sus propios scripts, pensé que quizás la razón podría ser la forma en que WordPress construye una página. Pero es cierto que no lo pregunté específicamente en mi pregunta, así que la editaré.

Rob Teeuwen Rob Teeuwen
16 feb 2018 11:53:19
Todas las respuestas a la pregunta 1
0

Probablemente no tenga que ver con el núcleo de WordPress; en la mayoría de los casos, este tipo de problema surge cuando hay conflictos entre plugins. Sugeriría desactivar todos los demás plugins y probar con un tema predeterminado, como Twenty Seventeen. Si funciona en ese momento, puedes cambiar el tema y probar, luego activar un plugin a la vez y probar, hasta encontrar cuál está en conflicto, y luego informar al autor del plugin para que pueda encontrar una solución.

Mientras tanto, si usas un tema predeterminado y solo este plugin sigue sin funcionar, aquí hay dos cosas que puedes probar en lugar de $(window).on('load'):

jQuery(window).load(function($) {
   // tu función
});

O de manera más concisa:

(function($) {
  // tu función
})(jQuery);

WordPress usa jQuery en modo "no conflict", por lo que podría ser simplemente la sintaxis del símbolo $. Si eso lo soluciona, a menudo es más rápido enviar una solicitud de extracción (pull request) al repositorio del plugin para motivar al autor a tomar acción.

16 feb 2018 17:33:02