11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Voila j'ai un div en absolute et en hidden qui contient un texte dynamique.
Donc je ne ne connais pas le height de mon div (height :auto;)

Quand je click sur un lien je passe mon div en visible. Juske là tout va bien.
Le truc c ke mon client voudrais ke son div de texte ne s'affiche pas brutalement mais k'il s'agrandisse doucement juska atteindre la hauteur necessaire a son contenu.

J'imagine ke l'idée c :
- de recuperer la hauteur rélle de mon div avec un truc genre offsetHeight
- puis d'executer une fonction js qui passe le height de mon div de 0 a sa hauteur normale.

Je ne suis pas bien costo en javascript! Vous pouvez m'aider ?

Merci a tous
Modifié par deloo (02 Nov 2006 - 18:13)
Eldebaran a écrit :
Tu peux peut-être jeter un coup d'oeil ici :

http://developer.yahoo.com/yui/ (Animation Utility)



Merci bien mais je l'ai déjà cette bibliotheque et ya pas ce ke je cherche dedans. Enfin il y a surement mais les sources js sont bien trop complexes pour la petite fonction donc j'ai besoin

Vraiment personne pour m'aider ?
gcyrillus a écrit :
bonsoir

il y a la surement une methode qui correspond a ce que tu recherche :
http://forum.alsacreations.com/topic-5-3716-2-Fonctions-mthodes-class-et-scripts-utiles.html#p116013

++ Smiley smile


Surement mais je trouve pas et je le precise a nouveau : je suis nul en js!

Donc j' imagine qu'il faut faire un offsetHeigth sur le div en question et envoyer cette valeur a mon script js (script qui n'existe pas, puisque que je demande comment faire Smiley cligne )

Donc comment m'y prendre pour envoyer un offsetHeigth a un script js et comment faire un script qui passe le height du div de 0 a cette hauteur récupére par offsetHeigth ? En plus je suppose que je dois faire ça sur un temps défini via un boucle mais alors là..... à la rue le garçon.

Si vous avez une idée , je suis preneur.

Merci bien
Modifié par deloo (30 Oct 2006 - 16:11)
Modérateur
Salut,

Ca doit donner un ti'script comme çà... Smiley murf
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
		<title>Exemple</title>
		<style type="text/css" media="screen, projection">/*<![CDATA[*/

#exemple { width: 200px; background-color: #DF0; overflow: hidden; }

		/*]]>*/</style>
		<script type="text/javascript">//<![CDATA[

var oO =
{

	// Test de passage d'un argument
	_Test: 
		function()
		{
			var iI = arguments.length - 1;
			for(iI; iI >= 0; iI--) if(!arguments[iI]) return false;
			return true;
		},

	// Ajout d'une action sur un événement
	_Connect:
		function(oElem, sEvType, fn, bCapture)
		{
			oElem.addEventListener ?
				oElem.addEventListener(sEvType, fn, bCapture):
				oElem.attachEvent ?
					oElem.attachEvent('on' + sEvType, fn):
					oElem['on' + sEvType] = fn;
		},

	// Méthode d'agrandissement et de rétrécissement progressif d'un conteneur
	_Deroule:
		function(id, initHeight, finalHeight, interval)
		{
			// Identification de l'objet
			var oElem = document.getElementById(id);
			if(!oElem) return;
			
			// Contrôle des valeurs de variables
			if(typeof(initHeight || finalHeight || interval) != 'number') return false;

			// Contrôle d'éxécution de la méthode
			if(oElem.movement) clearTimeout(oElem.movement);
			
			// Initialisation des paramètres
			if( !oElem.style.height ) oElem.style.height = parseInt(initHeight) + 'px';
			var iDimY = parseInt(oElem.style.height);
			
			// Condition de fin de la méthode
			if(iDimY == finalHeight) return true;
			
			// Conditions d'incrémentation et décrémentation
			if(iDimY < finalHeight)
			{
				var dist = Math.ceil((finalHeight - iDimY)/10);
				iDimY = iDimY + dist;
			}
			if(iDimY > finalHeight)
			{
				var dist = Math.ceil((iDimY - finalHeight)/10);
				iDimY = iDimY - dist;
			}
			oElem.style.height = iDimY + 'px';
			
			// Répétition de la méthode
			var repeat = "oO._Deroule('" + id + "'," + initHeight + "," + finalHeight + "," + interval + ")";
			oElem.movement = setTimeout(repeat, interval);
			return true;
		},

	// Méthode de chargement
	_Load:
		function()
		{
			var oDiv = document.getElementById('exemple');
			var iDivHeight = oDiv.offsetHeight;
			oO._Deroule('exemple', 0, iDivHeight, 30);
		}

};
// Lancement du script
oO._Test(document.getElementById)?
	oO._Connect(window, 'load', oO._Load, false):
	false;

		//]]></script>
	</head>	
	<body>
		<p id="exemple">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit.</p>
	</body>
</html>

Modifié par koala64 (30 Oct 2006 - 19:17)
Un grand merci koala64, j'ai un peu simplifier ton code mais ça marche Smiley cligne
Modifié par deloo (03 Nov 2006 - 16:33)
Bonjour,

j'ai un petit souci avec le onresize sous IE.

Je veux redimensionner mon div #content (compris entre un div #header et un div #footer) pour que le header et le footer apparaissent tout le temps à l'écran.
Hauteur du #content = hauteur fenetre - (hauteur header + hauteur footer)

Je me suis inspiré du script : http://pompage.net/pompe/pieds/
Au chargement de la page, j'associe l'event onresize à ma fonction setContentHeight:


	window.onload = function() {
	        setContentHeight();
	}
	
	window.onresize = function() {
	        setContentHeight();
	}



Le problème est que sous IE, cela tourne en boucle, le onresize générerait à nouveau un event onresize qui rappellerait la fonction , etc... etc... boucle infinie...


Voilà ce que fait ma fonction setContentHeight :


<script type="text/javascript">
//<![CDATA[
	
	//Redimensionnement :
	function getWindowHeight() {
		var windowHeight = 0;
		if (typeof(window.innerHeight) == 'number') {
			windowHeight = window.innerHeight;
		} else {
			if (document.body && document.body.clientHeight) {
				windowHeight = document.body.clientHeight;
			} else {
				if (document.documentElement && document.documentElement.clientHeight) {
					windowHeight = document.documentElement.clientHeight;
				}
			}
		}
		return windowHeight;
	}
	
	function getDivHeight(blocId) {
		var divHeight = 0;
		if (document.getElementById) {
			var div = document.getElementById(blocId);
			if (div) {
				divHeight = div.offsetHeight;
			} else {
				alert('div pas trouvé');
			}
		}
		//alert('divHeight trouvé = ' + divHeight);
		return divHeight;
	}
	
	function setContentHeight() {
		//Pour éviter qu'IE tourne en boucle sur le onResize :
		window.onresize = function() {
	        
		}
		if (document.getElementById) {
			var contGlobElement = document.getElementById('contGlob');
			var windowHeight = getWindowHeight();
			if (windowHeight > 0) {
				var headerHeight = getDivHeight('header');
				
		     	if (headerHeight > 0) {
					var contentElement = document.getElementById('main');
					if (contentElement) {
						//alert('windowHeight : ' + windowHeight + ', headerHeight : ' + headerHeight);
						contentElement.style.height = (windowHeight - headerHeight) + 'px' ;
						// TODO : trouver la syntaxe pour IE
					} else {
						alert('contentElement pas trouvé');
					}
					
					// Redimension de #contGlob = header + content
					if (contGlobElement) {
						if (contGlobElement.style.height) {
							contGlobElement.style.height = (headerHeight + contentElement.offsetHeight) + 'px' ;
						} else {
							//alert('contGlobElement pas valide');						
							// TODO : trouver la syntaxe pour IE
						}
					} else {
						alert('contGlobElement pas trouvé');
					}
		     	} else {
					alert('headerHeight <= 0');
				}
			} else {
				alert('windowHeight <= 0');
			}
		}
	}
		
	window.onload = function() {
	        setContentHeight();
	}
	
	window.onresize = function() {
	        setContentHeight();
	}
//]]>
</script>


Quelqu'un aurait une idée ? Merchi Smiley langue