Estoy tratando de implementar algo así como un carrusel de fotos en jQuery. Este carrusel se puede llenar con imágenes usando una variedad de fuentes de imagen (hago una solicitud ajax que devuelve un json con estos datos) y, una vez que se llena, puede llamar a un par de métodos, previous() y next() para mover el carrusel hacia adelante y hacia atrás, respectivamente.¿Hay un evento 'listo' disparado cuando se crea un elemento jQuery sobre la marcha?
El hecho es que esta funcionalidad ya está implementada y funcionando, pero no puedo resolver un problema en el proceso de cambio de tamaño. Para evitar que las imágenes excedan los límites del contenedor, tengo un método para crear y cambiar el tamaño de las imágenes, si es necesario.
this.getImageResized = function(imageSrc) {
var image = $('<img />', {src : imageSrc});
// Container ratio
var ratio = this.itemMaxWidth/this.itemMaxHeight;
// Target image ratio is WIDER than container ratio
if((image[0].width/image[0].height) > ratio) {
if(image[0].width > this.itemMaxWidth) {
image.css('width', this.itemMaxWidth + 'px');
image.css('height', 'auto');
}
// HIGHER
} else {
if(image[0].height > this.itemMaxHeight) {
image.css('width', 'auto');
image.css('height', this.itemMaxHeight + 'px');
}
}
// Embeds image into a wrapper with item's width and height
var wrapper = $('<span style="display : block; float : left; width : ' + this.itemMaxWidth + 'px; height : ' + this.itemMaxHeight + 'px"></span>');
image.appendTo(wrapper);
return wrapper;
};
Al probar esta función, he encontrado que a veces las imágenes no se redimensionan como se esperaba. He usado firebug console.log() para registrar la imagen [0] .width justo debajo de la creación del elemento jQuery, descubriendo que a veces el valor es 0.
No soy un experto en jQuery, pero supongo que cuando esto sucede (el valor es 0) es porque el elemento no está listo.
¿Cómo puedo asegurar que el elemento ya está cargado cuando solicito sus valores de ancho y alto?
¿Es esto posible?
var image = $('<img />', {src : imageSrc}).ready(function() {
// But image[0].width it's not available here!
});
Gracias por su ayuda!
posible duplicado de [jQuery evento para imágenes cargadas] (http://stackoverflow.com/questions/910727/jquery-event-for-images-loaded) – spender
@spender - Por favor, consulte mis comentarios a la respuesta de Sarfraz ... esto no es así t la misma pregunta, y esa tampoco es la respuesta adecuada, esto no debe cerrarse como duplicado ... porque, w ell, es una pregunta diferente. –
@Nick, solo puedo pensar que no detectó que Sarfaz está utilizando el evento de carga de la ventana, sin embargo, la respuesta en la pregunta vinculada utiliza el evento de carga de la imagen. Publicaré una respuesta para demostrar, pero realmente no debería ser necesario. – spender