1

Edit : bon, avec my_img.onload = resizer(ozMax, allMaps, iz, mycurrentAreas); "des fois ça marche, des fois ça marche pas"... pas besoin de vous prendre la tête, je vais inspecter mon code avant de revenir ici x_x).

Bon, j'en chie pas mal avec le js (en fait, pour être exact, j'en chie pas mal avec le js et la compatibilité avec IE8 cheeky)

Pour faire simple :
J'ai une fonction appelée une fois que mon corps de document est chargé (faisons ça proprement).
Dans cette fonction, j'ai besoin de précharger n images pour faire des calculs qui doivent me permettre de précalculer des mises à l'échelle de zones cliquables affectées à ces images, en fonction de l'environnement (mes zones cliquables sont définies pour les images non redimensionnées).
J'ai vite rencontré des problèmes parce que je devais temporiser le redimensionnement des maps/areas pour qu'il n'arrive pas avant le chargement des images. Du coup, j'ai un événement qui se lance à chaque fois qu'une image est chargée et qui redimensionne alors mes maps/areas.

Petit problème : avec IE8, j'ai une erreur js qui me dit que ce que je veux lancer sur le onload est "non implémenté". En fait, j'ai clairement l'impression qu'il n'arrive pas à comprendre la syntaxe qui permet de résoudre les résolutions de portées de variables machin.onload = (function () { monCode; })(mes, variables). Si je remplace ça par machin.onload = function () { alert('bidule'); }, ça marche bien.

Voici le bout de code en question :
function resizeAreas() { var allMaps = document.getElementsByTagName("map"); var izMax = allMaps.length; var my_img = new Array(); for(var iz=0;iz<izMax;iz++) { var mycurrentAreas = allMaps[iz].areas; var ozMax = mycurrentAreas.length; my_img[iz] = document.createElement("IMG"); my_img[iz].id = "preload_img"+allMaps[iz].id; my_img[iz].style.visibility="hidden"; my_img[iz].style.maxHeight="350px"; my_img[iz].style.position="absolute"; my_img[iz].style.top="0"; my_img[iz].style.left="0"; //Le +'?'+Math.random(); permet d'éviter qu'IE7 & 8 ne se basent sur les données en cache, ce qui fait que le onload sur l'image n'est jamais enclanché my_img[iz].src="./maps/"+allMaps[iz].id.substring(4)+".png"+'?'+Math.random(); //Permet de s'assurer du bon chargement de l'image, sinon l'opération peut aller tellement vite que l'image n'est pas chargée, donc que rien ne se passe comme il faut (mauvais calcul de coordonnées) my_img[iz].useMap = "#"+allMaps[iz].id; document.body.appendChild(my_img[iz]); var resizer = function(in_ozMax, in_allMaps, in_iz, in_mycurrentAreas) { my_img[in_iz].useMap = "#"+allMaps[iz].id; for (var oz=0; oz<in_ozMax; oz++) { resizeCoords(in_mycurrentAreas[oz].id, "preload_img"+in_allMaps[in_iz].id); } //On ne va pas garder dans le DOM quelque chose d'inutile... document.body.removeChild(document.getElementById("preload_img"+in_allMaps[in_iz].id)); } //my_img.onload = resizer(ozMax, allMaps, iz, mycurrentAreas); document.getElementById("preload_img"+allMaps[iz].id).onload = (function() { resizer(ozMax, allMaps, iz, mycurrentAreas); })(ozMax, allMaps, iz, mycurrentAreas); } }

Note : ça ne fonctionne pas non plus ni avec
my_img.onload = resizer(ozMax, allMaps, iz, mycurrentAreas);
ni avec
document.getElementById("preload_img"+allMaps[iz].id).onload = = resizer(ozMax, allMaps, iz, mycurrentAreas);


Alors que ça fonctionne bien avec Fx. Mais notre parc est encore en majorité sous XP+IE8 (même si ça évolue progressivement), du coup je suis bien emmerdé.

avatar

2

et comme ca ?

my_img.onload = function(){ resizer(ozMax, allMaps, iz, mycurrentAreas); };
et la le mec il le pécho par le bras et il lui dit '

3

Avec cette écriture, la portée des variables n'est pas suffisante pour arriver à l'appel de resizer.
avatar

4

Bon, ça marche, sauf que je rencontre à présent ce bug sous IE x_x
http://www.zeilenwechsel.de/it/articles/5/How-max-width-fails-in-IE8.html
(mon maxHeight="350px" fait que la hauteur est la bonne, mais que la largeur n'est pas recalculée en proportion : elle reste égale à celle de l'image d'origine... du coup, tous mes calculs sont faussés x_x
avatar

5

6

Oui, je suis en train d'essayer d'implémenter ça pour que ça colle à ma situation (de l'art de rendre du code imbitable encore plus imbitable... et dire que je n'aimais pas l'asm triso)
avatar

7

Ouaaaais, ça marche o/
avatar

8

Nil (./6) :
de l'art de rendre du code imbitable encore plus imbitable... et dire que je n'aimais pas l'asm

Je vois pas le rapport entre du code imbitable et de l'assembleur embarrassed

9

Moi non plus en fait fear
avatar

10

Bon. Tout va bien alors cool