2010-10-25 5 views
1

J'ai la fonction de préchargement simple suivante qui substitue une image "src" attribut avec une autre image (un GIF "Chargement"). Le problème se pose uniquement dans IE: si le "chargement" GIF est plus petit que l'image réelle src, cela sera redimensionné. Par exemple, si j'ai une image carrée de 100 pixels et que je la précharge, l'image est temporairement remplacée par un GIF animé de 50x50 pixels. Lorsque l'image originale est entièrement chargée, elle n'est PAS affichée à sa taille, mais à la taille 50px la plus petite. Voici le code, si vous en avez besoinpermuter des images de différentes tailles [Javascript vs IE]

_preload = function(url, placeholderUrl) { 
var img = new Image(); 
loading = true; 
var placeholder = new Element("img", { 
    src: placeholderUrl 
}); 
img.placeholder = placeholder; 
img.onload = function(evt) { 
    this.placeholder.src = this.src; 
    loading = false; 
} 
img.src = url; 
return placeholder; 
} 

alt text Ici vous pouvez voir l'erreur visuelle

+0

Je ne sais pas, mais essayer de forcer un 'img.style.width =" auto ";' (et en conséquence, 'height') sur l'image après avoir changé le src –

Répondre

2

Vous devriez pouvoir régler la largeur/hauteur de l'image dans la fonction de rappel:

img.onload = function(evt) { 
    this.placeholder.src = this.src; 
    this.placeholder.width = this.width; 
    this.placeholder.height = this.height; 
    loading = false; 
} 

Exemple: Resizing image onLoad

+0

Cela résout définitivement mon problème. Cependant, il est très étrange que vous soyez autorisé à faire quelque chose comme ça ET que le navigateur ne le fasse pas tout seul: P – Raffaele

+0

Définir la largeur/hauteur est comme paramétrer le src ils sont tous des propriétés publiques. Mais oui, ce serait vraiment bien si tous les navigateurs fonctionnaient de la même manière avec JS. – subhaze

0

Je suppose que le remplacement espace réservé avec img (les img-éléments à l'intérieur du dom), au lieu de simplement changer l'attribut src de l'espace réservé, devrait résoudre ce problème.

+0

Ceci est aussi une solution, mais il me semble plus difficile. Remplacement dans dom = addedNew + removeOld. Puisque je ne veux pas afficher 2 images en même temps, je devrais d'abord supprimer(), puis ajouter(), mais ajouter pourrait être une fonction plutôt complexe si vous n'avez plus la référence de l'élément fictif dans le dom. – Raffaele

Questions connexes