Sto scrivendo alcuni Javascript per ridimensionare l'immagine grande per adattarla alla finestra del browser dell'utente. (Non controllo la dimensione delle immagini di origine, purtroppo.)Come posso determinare se un'immagine è stata caricata, usando Javascript/jQuery?
Quindi qualcosa di simile sarebbe nel codice HTML:
<img id="photo"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
C'è un modo per me per determinare se l'immagine src
in un tag img
è stato scaricato?
Ho bisogno di questo perché sto incontrando un problema se $(document).ready()
viene eseguito prima che il browser abbia caricato l'immagine. $("#photo").width()
e $("#photo").height()
restituiranno la dimensione del segnaposto (il testo alt). Nel mio caso questo è qualcosa come 134 x 20.
In questo momento sto solo controllando se l'altezza della foto è inferiore a 150 e supponendo che, in tal caso, si tratti solo di testo alternativo. Ma questo è piuttosto un trucco, e si interromperebbe se una foto è alta meno di 150 pixel (non è probabile nel mio caso particolare), o se il testo alt è più alto di 150 pixel (potrebbe accadere su una piccola finestra del browser) .
Edit: per chi vuole vedere il codice:
$(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));
}
});
Aggiornamento: Grazie per i suggerimenti. Esiste il rischio che l'evento non venga attivato se imposto una richiamata per l'evento $("#photo").load
, quindi ho definito un evento onLoad direttamente sul tag immagine. Per la cronaca, ecco il codice ho finito per andare con:
<img id="photo"
onload="photoLoaded();"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
Poi in 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));
}
});
Questo è così vecchio e hai già accettato una risposta, quindi mi limiterò a commentare qui. Perché non puoi usare il plugin jQuery 'onImagesLoad'? Inoltre, jQuery o no, cosa c'è di sbagliato nell'impostare 'max-width' e' max-height' nello stile dell'immagine con Javascript? Evita quindi TUTTO il codice che hai bisogno di scrivere impostando la larghezza/altezza massima alla dimensione della larghezza/altezza della finestra. – jonwd7
@ jon.wd7: non ho familiarità con quel plug-in e potrebbe non essere stato pubblicato nel 2008. come per max-width e max-height, due cose: 1) non sono supportate in IE (beh non sono sicuro di IE 8); 2) se la vista cambia dimensione (la finestra viene ridimensionata, ecc.) Allora avrei ancora bisogno di javascript per modificare la larghezza massima/altezza massima (anche se non posso se ho usato "100%" piuttosto che una misurazione pixel) – Kip
È decisamente supportato in IE7 e IE8, secondo quirksmode.org. Quindi non sono sicuro del tuo problema. Personalmente non supporto IE6 per piccole cose come questa, quindi quello che vedranno è la stessa cosa che un utente senza JS abilitato vedrebbe. E ovviamente dovresti reimpostare 'max-width' e' max-height' sul ridimensionamento. Ma è un compito abbastanza facile, un one-liner che usa infatti ".resize()". – jonwd7