En jQuery cuando haces esto:
$(function() {
alert("DOM is loaded, but images not necessarily all loaded");
});
Espera a que el DOM se cargue y ejecuta su código. Si no se cargan todas las imágenes, aún ejecuta el código. Obviamente, esto es lo que queremos si estamos inicializando cualquier elemento DOM, como mostrar u ocultar elementos o adjuntar eventos.
Digamos, sin embargo, que quiero algo de animación y no quiero que se ejecute hasta que se carguen todas las imágenes. ¿Hay alguna forma oficial en jQuery para hacer esto?
La mejor manera que tengo es usar <body onload="finished()">
, pero realmente no quiero hacerlo a menos que tenga que hacerlo.
Nota: Hay un error en jQuery 1.3.1 en Internet Explorer que realmente espera a que se carguen todas las imágenes antes de ejecutar el código en su interior $function() { }
. Entonces, si está utilizando esa plataforma, obtendrá el comportamiento que estoy buscando en lugar del comportamiento correcto descrito anteriormente.
$("img").load()
funcionaRespuestas:
Con jQuery, se usa
$(document).ready()
para ejecutar algo cuando se carga el DOM y$(window).on("load", handler)
para ejecutar algo cuando se cargan todas las demás cosas, como las imágenes.La diferencia se puede ver en el siguiente archivo HTML completo, siempre que tenga
jollyroger
archivos JPEG (u otros adecuados):Con eso, el cuadro de alerta aparece antes de cargar las imágenes, porque el DOM está listo en ese punto. Si luego cambias:
dentro:
a continuación, el cuadro de alerta no aparece hasta después de las imágenes se cargan.
Por lo tanto, para esperar hasta que toda la página esté lista, puede usar algo como:
fuente
Escribí un complemento que puede disparar devoluciones de llamada cuando las imágenes se han cargado en elementos, o disparar una vez por imagen cargada.
Es similar a
$(window).load(function() { .. })
, excepto que le permite definir cualquier selector para verificar. Si solo desea saber cuándo se#content
han cargado todas las imágenes (por ejemplo), este es el complemento para usted.También es compatible con la carga de imágenes que se hace referencia en el CSS, tales como
background-image
,list-style-image
, etc.waitForImages jQuery plugin
Ejemplo de uso
Ejemplo en jsFiddle .
Hay más documentación disponible en la página de GitHub.
fuente
('img selector').each(function(index) { var offset = $(this).offset(); ...});
sin embargo, offset.top sigue siendo cero. ¿Por qué?$(window).load()
funcionará solo la primera vez que se cargue la página. Si está haciendo cosas dinámicas (ejemplo: haga clic en el botón, espere a que se carguen algunas imágenes nuevas), esto no funcionará. Para lograr eso, puedes usar mi complemento:Manifestación
Descargar
fuente
Yevgeniy Afanasyev
la respuesta , imagesLoaded hace un trabajo mucho mejor en esto y cubre el caso de uso que mencionó junto con muchos otros casos de esquina (vea los problemas resueltos de github) .Para aquellos que desean ser notificados de la finalización de la descarga de una sola imagen que se solicita después de los
$(window).load
incendios, puede usar elload
evento del elemento de imagen .p.ej:
fuente
Ninguna de las respuestas hasta ahora ha dado lo que parece ser la solución más simple.
fuente
Recomendaría usar la
imagesLoaded.js
biblioteca javascript.¿Por qué no usar jQuery's
$(window).load()
?Según lo publicado en /programming/26927575/why-use-imagesloaded-javascript-library-versus-jquerys-window-load/26929951
Otras buenas razones para usar imágenes cargadas
Recursos
fuente
Con jQuery vengo con esto ...
Demostración: http://jsfiddle.net/molokoloco/NWjDb/
fuente
Use imagesLoaded PACKAGED v3.1.8 (6.8 Kb cuando está minimizado). Es un proyecto relativamente antiguo (desde 2010) pero aún activo.
Puede encontrarlo en github: https://github.com/desandro/imagesloaded
Su sitio oficial: http://imagesloaded.desandro.com/
Por qué es mejor que usar:
Porque es posible que desee cargar imágenes dinámicamente, así: jsfiddle
fuente
De esta manera, puede ejecutar una acción cuando se cargan todas las imágenes dentro del cuerpo o cualquier otro contenedor (que depende de su selección). PURE JQUERY, no se necesitan complementos.
fuente
Mi solución es similar al molokoloco . Escrito como función jQuery:
ejemplo:
fuente