J'écris du Javascript pour redimensionner la grande image pour l'adapter à la fenêtre du navigateur de l'utilisateur. (Je ne contrôle malheureusement pas la taille des images sources.)
Donc, quelque chose comme ça serait dans le HTML:
<img id="photo"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
Existe-t-il un moyen pour moi de déterminer si l' src
image d'une img
balise a été téléchargée?
J'en ai besoin car je rencontre un problème s'il $(document).ready()
est exécuté avant que le navigateur n'ait chargé l'image. $("#photo").width()
et $("#photo").height()
renverra la taille de l'espace réservé (le texte alternatif). Dans mon cas, c'est quelque chose comme 134 x 20.
Pour le moment, je vérifie simplement si la hauteur de la photo est inférieure à 150 et en supposant que si c'est le cas, il ne s'agit que d'un texte alternatif. Mais c'est tout un hack, et cela se casserait si une photo mesure moins de 150 pixels de haut (ce qui n'est probablement pas le cas dans mon cas particulier), ou si le texte alternatif mesure plus de 150 pixels de haut (cela pourrait éventuellement se produire sur une petite fenêtre de navigateur) .
Edit: Pour tous ceux qui souhaitent voir le code:
$(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));
}
});
Mise à jour : Merci pour les suggestions. Il y a un risque que l'événement ne soit pas déclenché si je définis un rappel pour l' $("#photo").load
événement, j'ai donc défini un événement onLoad directement sur la balise image. Pour mémoire, voici le code avec lequel j'ai fini par aller:
<img id="photo"
onload="photoLoaded();"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
Puis 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));
}
});
max-width
etmax-height
le style de l'image avec Javascript? Vous évitez alors TOUT le code que vous avez dû écrire en définissant la largeur / hauteur maximale sur la taille de la largeur / hauteur de la fenêtre.