¿Es posible detectar cuándo se cargan todas las imágenes a través de un evento jQuery?
Idealmente, debería haber un
$(document).idle(function()
{
}
o
$(document).contentLoaded(function()
{
}
Pero no puedo encontrar tal cosa.
Pensé en adjuntar un evento como este:
$(document).ready(function()
{
var imageTotal = $('img').length;
var imageCount = 0;
$('img').load(function(){if(++imageCount == imageTotal) doStuff();});
}
Pero, ¿se romperá esto si una imagen no se carga? Es de vital importancia que se llame al método y en el momento adecuado.
Respuestas:
Según la documentación de jQuery , hay una serie de advertencias para usar el evento de carga con imágenes. Como se señaló en otra respuesta, el complemento ahpi.imgload.js está roto, pero la esencia de Paul Irish vinculada ya no se mantiene.
Según Paul Irish, el complemento canónico para detectar eventos de carga completa de imágenes ahora está en:
https://github.com/desandro/imagesloaded
fuente
Si desea verificar no todas las imágenes, sino una específica (por ejemplo, una imagen que reemplazó dinámicamente después de que DOM ya está completo), puede usar esto:
fuente
load()
no se disparará cuando una imagen ya esté cargada. Esto puede suceder fácilmente cuando una imagen está en la caché del navegador del usuario. Puede verificar si una imagen ya está cargada usando$('#myImage').prop('complete')
, que devuelve verdadero cuando se carga una imagen.Puede usar mi complemento waitForImages para manejar esto ...
La ventaja de esto es que puede localizarlo en un elemento ancestro y, opcionalmente, puede detectar imágenes referenciadas en el CSS.
Sin embargo, esto es solo la punta del iceberg, consulte la documentación para obtener más funciones.
fuente
No se garantiza el uso de jQuery $ (). Load () como un controlador de eventos IMG. Si la imagen se carga desde el caché, es posible que algunos navegadores no activen el evento. En el caso de las versiones (¿más antiguas?) De Safari, si cambió la propiedad SRC de un elemento IMG al mismo valor , el evento onload NO se activará.
Parece que esto se reconoce en el último jQuery (1.4.x) - http://api.jquery.com/load-event - para citar:
Ahora hay un complemento para reconocer este caso y la propiedad "completa" de IE para los estados de carga del elemento IMG: http://github.com/peol/jquery.imgloaded/raw/master/ahpi.imgload.js
fuente
Según esta respuesta , puede usar el evento de carga jQuery en el
window
objeto en lugar dedocument
:Esto se activará después de que se haya cargado todo el contenido de la página. Esto difiere de lo
jQuery(document).load(...)
que se activa después de que DOM ha terminado de cargarse.fuente
imagesLoaded Plugin es el camino a seguir, si necesita una solución de navegador cruzado
Si solo necesita un IE WorkAround, esto lo hará
fuente
Hay una nota en el complemento ahpi.imgload.js en este momento que dice que actualmente está roto, y para probar esta esencia en su lugar: https://gist.github.com/797120/7176db676f1e0e20d7c23933f9fc655c2f120c58
fuente
Para imágenes del mismo origen, puede usar:
fuente
tal vez este complemento pueda ser útil: http://www.farinspace.com/jquery-image-preload-plugin/
fuente
fuente
fuente
Creé mi propio script, porque encontré que muchos complementos estaban bastante inflados y solo quería que funcionara como quería. Mine comprueba si cada imagen tiene una altura (altura de imagen nativa). Lo he combinado con la función $ (window) .load () para solucionar los problemas del almacenamiento en caché.
Lo he comentado bastante en código, por lo que debería ser interesante de ver, incluso si no lo usa. Funciona perfectamente para mí.
Sin más preámbulos, aquí está:
Script imgLoad.js
fuente
Esperando a que se carguen todas las imágenes ...
Encontré la respuesta a mi problema con jfriend00 aquí jquery: ¿cómo escuchar el evento cargado de imagen de un contenedor div? .. y "if (this.complete)" ¡
Esperando a que se cargue todo y posiblemente algo en la caché! .. y he agregado el evento "error" ... es robusto en todos los navegadores
Demostración: http://jsfiddle.net/molokoloco/NWjDb/
fuente
window.load = function(){}
Es totalmente compatible con todos los navegadores y disparará un evento cuando todas las imágenes estén completamente cargadas.
https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload
fuente