11548 sujets

JavaScript, DOM et API Web HTML5

salut a tous ...
j'ai un petit souçis avec IE, j'ai créer une méthode qui permet d'afficher une image après son chargement dans le cache du navigateur, mais sous ie , l'image ne s'affiche que lors du 2 eme click Smiley decu sous firefox aucun souçis ...

url de démo : http://easynews.free.fr/easy_finalv2/
choisissez la 1ere galerie par exemple et clicker sur l'oeil.

le script qui s'occupe de charger l'image

var coeff=4;//Coefficient de reduction
	var chang=null;
	var style="width:120px; border:3px solid #666666;position:absolute;left: 50%;top: 50%;margin-left:-60px; text-align:center";
	//var styleImg="display:none;";
	function initialiser(source){
	navigateur = cherche_navigateur_simple();
	coeff = 4;
	if(document.getElementById("madiv")){
	//on supprime la précédente image
		var divaSupp = document.getElementById("madiv");
		var imgaSupp = document.getElementById("monimg");
		divaSupp.removeChild(imgaSupp);
		document.body.removeChild(divaSupp);
	}
	
		if (navigateur == "ie") { 
			//on créer un nouvel élément html de type div
			var newdiv = document.createElement('div');
			//On affecte un attribut de type id, avec l'id précédement créé
			newdiv.setAttribute("id","madiv");
			//on affecte le style a la div
			newdiv.style.setAttribute("cssText",style);
			//on créer la div dans le body
			document.body.appendChild(newdiv);
			//on créer un nouvel élément html de type image
			var newImg = document.createElement('img');
			//on affecte la source a l'image qui viens d'etre créé
			newImg.setAttribute("src",source);
			//affectation d'un id a l'image
			newImg.setAttribute("id","monimg");
			//On assigne les variable de hauteur et largeur AVANT d'appliquer la propriété display:none
			var largeur = newImg.getAttribute("width");
			var hauteur = newImg.getAttribute("height");
			//on affecte un style a l'image
			newImg.style.setAttribute("cssText","display:none;");
			//affectation du onclick
			newImg.onclick =masqueAgrandissement;
			//on crée l'image dans la div	
			newdiv.appendChild(newImg);
			//newImg.style.setAttribute("cssText",styleImg);
			//création d'une image our faire patienter pendant le chargement
			var newImgTemp = document.createElement('img');
			//on affecte la source a l'image qui viens d'etre créé
			newImgTemp.setAttribute("src","images/chargement-en-cours.gif");
			//affectation d'un id a l'image
			newImgTemp.setAttribute("id","imgTemp");
			//on ajoute l'image dans la div [smile]<br />
			newdiv.appendChild(newImgTemp);
		} 
		else {
			//on créer un nouvel élément html de type div
			var newdiv = document.createElement('div');
			//On affecte un attribut de type id, avec l'id précédement créé
			newdiv.setAttribute("id","madiv");
			//on affecte le style a la div
			newdiv.setAttribute("style",style);
			//on créer la div dans le body
			document.body.appendChild(newdiv);
			//on créer un nouvel élément html de type image
			var newImg = document.createElement('img');
			//on affecte la source a l'image qui viens d'etre créé
			newImg.setAttribute("src",source);
			//affectation d'un id a l'image
			newImg.setAttribute("id","monimg");
			//affectation du onclick
			newImg.setAttribute("onclick","masqueAgrandissement();");
			newImg.setAttribute("style","display:none;");
			//on crée l'image dans la div	
			newdiv.appendChild(newImg);
			//création d'une image our faire patienter pendant le chargement
			var newImgTemp = document.createElement('img');
			//on affecte la source a l'image qui viens d'etre créé
			newImgTemp.setAttribute("src","images/chargement-en-cours.gif");
			//affectation d'un id a l'image
			newImgTemp.setAttribute("id","imgTemp");
			//on assigne le style display:none a l'image pour eviter un bug sous firefox;
			//newImg.setAttribute("style",styleImg);
			//on ajoute l'image dans la div [smile]<br />
			newdiv.appendChild(newImgTemp);
		}
		//on définit le timer et on appel la fonction qui va controler si l'image est charger
		actif=setTimeout('controleChargement(\''+hauteur+'\',\''+largeur+'\')',300);
	}
	function changer(largeur,hauteur){
		if ( parseInt(document.getElementById("madiv").style.width) != largeur  ) {
		document.getElementById("monimg").style.display = "block";
		document.getElementById("monimg").style.display = "block";
		document.getElementById("madiv").style.visibility = "visible";
		coeff = coeff-0.2;
		document.getElementById("madiv").style.width = Math.round(largeur/coeff)+"px";
		document.getElementById("madiv").style.height = Math.round(hauteur/coeff)+"px";
		document.getElementById("monimg").style.width = document.getElementById("madiv").style.width
		document.getElementById("monimg").style.height = document.getElementById("madiv").style.height
		document.getElementById("madiv").style.marginLeft = -(parseInt(document.getElementById("madiv").style.width) /2)+"px";
		document.getElementById("madiv").style.marginTop = -(parseInt(document.getElementById("madiv").style.height) /2)+"px";
		chang=window.setTimeout('changer("'+largeur+'","'+hauteur+'");',60);//vitesse de l'effet
		}
		else {
			window.clearTimeout(chang);
		}
	}
	function masqueAgrandissement(){
		var divaSupp = document.getElementById("madiv");
		var imgaSupp = document.getElementById("monimg");
		divaSupp.removeChild(imgaSupp);
		document.body.removeChild(divaSupp);
	}
	function cherche_navigateur_simple() {
	
		// on crée la variable qui accueillera le message relatif au navigateur
		var navigateur = "";
		
		// Attention, l'ordre de recherche est important !! Parce que IE reprend la mention 'Mozilla' et Opera reprend la mention 'MSIE' !!
		// on teste si on trouve la mention 'Opera...' dans le nom du navigateur
		if ( navigator.userAgent.indexOf('Opera 5') != -1 ) { navigateur = 'Vous utilisez un navigateur alternatif'; }
		
		// on teste si on trouve la mention 'MSIE' dans le nom du navigateur
		else if ( navigator.userAgent.indexOf('MSIE') != -1 ) { navigateur = 'ie'; }
		else if ( navigator.userAgent.indexOf('Mozilla') != -1 ) { navigateur = 'gecko'; }
		
		// si rien n'a été reconnu...
		else { navigateur = 'Vous utilisez un navigateur alternatif'; }
		
		// on affecte la variable 'navigateur' au formulaire
		return navigateur;
	}
	function controleChargement(hauteur,largeur){
			window.clearTimeout(actif);
			
			if(document.getElementById("monimg").complete){ // image complètement chargée
				//alors on supprime l'image temporaire
				var divaSupp = document.getElementById("madiv");
				var imgaSupp = document.getElementById("imgTemp");
				divaSupp.removeChild(imgaSupp);
				if(navigateur == "ie"){
						//document.getElementById("monimg").style.display = "block";
						document.getElementById("madiv").style.display = "block";
						document.getElementById("madiv").style.visibility = "hidden";
				}
				else{
					//sous firefox on récupère les propriétés après le chargement de l'image
					var largeur = document.getElementById("monimg").width
					var hauteur = document.getElementById("monimg").height					
				}
				//alert(document.getElementById("monimg").width);
				if(largeur > 800 || hauteur > 600){
					var infoImg = redimImage(largeur, hauteur,800,600);
					largeur = infoImg[0];
					hauteur = infoImg[1];
				}
				
				changer(largeur,hauteur);
			}
			else {
				actif=setTimeout('controleChargement(\''+hauteur+'\',\''+largeur+'\')',1000)
			}
	}



merci a tous