Estoy escribiendo algo de Javascript para cambiar el tamaño de la imagen grande para que quepa en la ventana del navegador del usuario. (Desafortunadamente, no controlo el tamaño de las imágenes de origen).
Entonces, algo como esto estaría en el HTML:
<img id="photo"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
¿Hay alguna forma de determinar si la src
imagen de una img
etiqueta se ha descargado?
Necesito esto porque tengo un problema si $(document).ready()
se ejecuta antes de que el navegador haya cargado la imagen. $("#photo").width()
y $("#photo").height()
devolverá el tamaño del marcador de posición (el texto alternativo). En mi caso, esto es algo así como 134 x 20.
En este momento, solo estoy comprobando si la altura de la foto es inferior a 150, y suponiendo que, si es así, es solo texto alternativo. Pero esto es todo un truco, y se rompería si una foto tiene menos de 150 píxeles de alto (no es probable en mi caso particular), o si el texto alternativo tiene más de 150 píxeles de alto (posiblemente podría ocurrir en una ventana pequeña del navegador) .
Editar: para cualquiera que quiera ver el código:
$(function()
{
var REAL_WIDTH = $("#photo").width();
var REAL_HEIGHT = $("#photo").height();
$(window).resize(adjust_photo_size);
adjust_photo_size();
function adjust_photo_size()
{
if(REAL_HEIGHT < 150)
{
REAL_WIDTH = $("#photo").width();
REAL_HEIGHT = $("#photo").height();
if(REAL_HEIGHT < 150)
{
//image not loaded.. try again in a quarter-second
setTimeout(adjust_photo_size, 250);
return;
}
}
var new_width = . . . ;
var new_height = . . . ;
$("#photo").width(Math.round(new_width));
$("#photo").height(Math.round(new_height));
}
});
Actualización : Gracias por las sugerencias. Existe el riesgo de que el evento no se active si configuro una devolución de llamada para el $("#photo").load
evento, por lo que he definido un evento onLoad directamente en la etiqueta de la imagen. Para que conste, aquí está el código con el que terminé yendo:
<img id="photo"
onload="photoLoaded();"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
Luego en Javascript:
//This must be outside $() because it may get called first
var isPhotoLoaded = false;
function photoLoaded()
{
isPhotoLoaded = true;
}
$(function()
{
//Hides scrollbars, so we can resize properly. Set with JS instead of
// CSS so that page doesn't break with JS disabled.
$("body").css("overflow", "hidden");
var REAL_WIDTH = -1;
var REAL_HEIGHT = -1;
$(window).resize(adjust_photo_size);
adjust_photo_size();
function adjust_photo_size()
{
if(!isPhotoLoaded)
{
//image not loaded.. try again in a quarter-second
setTimeout(adjust_photo_size, 250);
return;
}
else if(REAL_WIDTH < 0)
{
//first time in this function since photo loaded
REAL_WIDTH = $("#photo").width();
REAL_HEIGHT = $("#photo").height();
}
var new_width = . . . ;
var new_height = . . . ;
$("#photo").width(Math.round(new_width));
$("#photo").height(Math.round(new_height));
}
});
fuente
max-width
ymax-height
en el estilo de la imagen con Javascript? Luego, evita TODO el código que ha necesitado escribir estableciendo el ancho / alto máximo en el tamaño del ancho / alto de la ventana gráfica.max-width
ymax-height
cambiar el tamaño. Pero esa es una tarea bastante fácil, de hecho, una sola línea.resize()
.