11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

j'aimerais avoir un contenant (l'équivalent d'un div en css, je ne sais pas ce qu'il faut prendre : iframe ?) dont la taille varie après x secondes.
Savez vous :
1. si c'est possible
2. si je peux trouver un bout de code quelque part pour faire ça ?
Modifié par ricotrutt (29 Dec 2006 - 23:14)
Salut,
ricotrutt a écrit :
j'aimerais avoir un contenant (l'équivalent d'un div en css, je ne sais pas ce qu'il faut prendre : iframe ?) dont la taille varie après x secondes.
Savez vous :
1. si c'est possible
2. si je peux trouver un bout de code quelque part pour faire ça ?
Pas besoin d'iframe pour ça. Smiley cligne

Jette un coup d'oeil aux exemples de scripts du forum par exemple.
merci pour ta réponse ! Je viens de jeter un oeil, et effectivement il faut utiliser la techniques pour les menus en JS je pense. Néanmoins dans l'exemple que tu donnes le truc ne se referme pas tout seul, ce que je souhaiterais (en fait je voudrais qu'il y ait un truc ouvert au chargement de la page, qui se referme au bout de x secondes et que tu puisses réouvrir en cliquant dessus, et qui se referme après les mêmes x secondes, etc...).
Je pense qu'à partir du code que tu donnes dans ton lien il y a juste un petite modif à faire dans le JS, mais je ne sais pas du tout gérer le temps en JS. Any idea ?

Sinon j'ai aussi trouvé ça :
http://forum.alsacreations.com/topic-5-3716-1-Fonctions-methodes-class-et-scripts-utiles.html#p60995
mais il me semble que ça répond moins à mes besoins celle que tu avais proposée.
Je précise un peu parce que ça n'était pas clair.

La fonction que tu proposais semble parfaite pour ce que je veux faire, mais il faut juste que j'arrive à modifer deux derniers trucs :

1. Faire en sorte que le menu soit ouvert par défaut au chargement
2. Faire en sorte que le menu ne se referme pas quand la souris n'est plus dessus, mais que ce soit après x secondes.

Est ce que quelqu'un peu m'aider là dessus ?
pour que soit ouvert au départ ça normalement tu dois pouvoir y arriver sans probleme il n'y a pas de javascript.

après dans ton javascript il te faut 2 fonctions une "cache mon menu" et l'autre "montre mon menu"

Tu fais appelle à ces deux fonction par un setTimeout qui créera un décalage entre le moment ou tu appelles ta fonction et quand elle sera exécuté.
je ne comprends pas pourquoi tu dis que pour que ce soit ouvert au lancement de la page ça n'est pas du javascript ?
Sinon le setTimeout est génial a priori je devrais réussir à quelque chose avec ça !
Bon je n'arrive pas à place le timeout je pense que je fais une erreur de code.
Voici ce que j'ai fait.

Je rappelle le code js :

var drawerMenu = {

	inc : 5,

	elements : new Array,

	timers : new Array,

	construct : function()

	{

		var dls = document.getElementsByTagName('dl');

		var n = 0;

		for(var i = 0; i < dls.length; i++)

		{

			if(dls[ i].className == 'menu')

			{

				n++;

				drawerMenu.timers[n] = 0;

				dls[ i].onmouseover = drawerMenu.triggerShow;

				dls[ i].onmouseout = drawerMenu.triggerHide;

				dls[ i].targetElement = n;

				for(var j = 0; j < dls[ i].childNodes.length; j++)

				{

					if(dls[ i].childNodes[j].nodeType == 1)

					{

						if(dls[ i].childNodes[j].tagName == 'DD')

						{

							dls[ i].childNodes[j].style.position = 'relative';

							dls[ i].childNodes[j].style.overflow = 'hidden';

							dls[ i].childNodes[j].style.height = '0px';

							for(var k = 0; k < dls[ i].childNodes[j].childNodes.length; k++)

							{

								if(dls[ i].childNodes[j].childNodes[k].nodeType == 1)

								{

									if(dls[ i].childNodes[j].childNodes[k].tagName == 'UL')

									{

										drawerMenu.elements[n] = dls[ i].childNodes[j].childNodes[k];					

										dls[ i].childNodes[j].childNodes[k].style.position = 'absolute';

										dls[ i].childNodes[j].childNodes[k].style.top = '-'+dls[ i].childNodes[j].childNodes[k].offsetHeight+'px';

									}

								}

							}

						}

					}

				}

			}

		}

	},

	triggerShow : function()

	{

		if(drawerMenu.timers[this.targetElement]) clearInterval(drawerMenu.timers[this.targetElement]);

		drawerMenu.timers[this.targetElement] = setInterval('drawerMenu.show('+this.targetElement+')', 20);

	},

	triggerHide : function()

	{

		if(drawerMenu.timers[this.targetElement]) clearInterval(drawerMenu.timers[this.targetElement]);

		drawerMenu.timers[this.targetElement] = setInterval('drawerMenu.hide('+this.targetElement+')', 20);

	},

	show : function(i)

	{

		var ul = drawerMenu.elements[ i];

		var t = parseInt(ul.style.top);

		var inx = Math.ceil(-t/drawerMenu.inc);

		if(t+inx < 0)

		{

			ul.style.top = (t+inx) +'px';

			ul.parentNode.style.height = (ul.offsetHeight+t+inx) + 'px';

		}

		else if(t < 0)

		{

			ul.style.top = '0px';

			ul.parentNode.style.height = ul.offsetHeight + 'px';

		}

		else

		{

			clearInterval(drawerMenu.timers[ i]);

			drawerMenu.timers[ i] = 0;

		}

	},

	hide : function(i)

	{

		var ul = drawerMenu.elements[ i];

		var t = parseInt(ul.style.top);

		var inx = Math.ceil(t/drawerMenu.inc);

		if(inx == 0) inx = -1;

		if(t+inx > -ul.offsetHeight)

		{

			ul.style.top = (t+inx) +'px';

			ul.parentNode.style.height = (ul.offsetHeight+t+inx) + 'px';

		}

		else if(t > -ul.offsetHeight)

		{

			ul.style.top = -ul.offsetHeight + 'px';

			ul.parentNode.style.height = '0px';

		}

		else

		{

			clearInterval(drawerMenu.timers[ i]);

			drawerMenu.timers[ i] = 0;

		}

	}

}



window.onload = drawerMenu.construct;


Dans la fonction construct j'ai supprimé
dls[ i].onmouseout = drawerMenu.triggerHide;
pour éviter que le menu ne se referme quand la souris n'est plus dessus, ça marche.

Ensuite j'ai fait passer la fonction triggerHide avant la fonction triggerShow (je ne sais pas si ça a de l'importance l'ordre en js, mais je suppose que oui), et j'ai ajouté le setTimeout dans la fonction triggerShow de la manière suivante :


triggerShow : function()

	{

		if(drawerMenu.timers[this.targetElement]) clearInterval(drawerMenu.timers[this.targetElement]);

		drawerMenu.timers[this.targetElement] = setInterval('drawerMenu.show('+this.targetElement+')', 20);

		setTimeout('triggerHide()', 1000);
	},


et lorsque je charge ma page, quand je passe la souris sur le menu il s'ouvre bien, par contre il ne se referme pas. J'ai du manquer quelque chose... Smiley biggol


Edit : j'ai farfouillé sur Internet et peut être trouvé une alternative : le flash transparent. Seulement aux dernière nouvelles ça ne passe pas trop sous FF. Vous en pensez quoi ?
Modifié par ricotrutt (29 Dec 2006 - 15:14)