Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS1/AS2
AS1/AS2 Questions relatives à la programmation ActionScript 1 et 2 (Cours AS2)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/04/2008, 15h48   #1
BnA
Membre éclairé
 
Avatar de BnA
 
Inscription : mars 2006
Messages : 559
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : mars 2006
Messages : 559
Points : 380
Points : 380
Envoyer un message via MSN à BnA
Par défaut Bug positionnement dans menu "accordéon" multiniveau

Bonjour à tous!!

Tout d'abord, j'espère vraiment que vous réussirez à solutionner mon problème!!

Voici tout d'abord le code AS2, si vous voulez voir l'engin en situation, j'ai joint le XML, le fla (MovieClip inclus) et le swf...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 
var menu_xml = new XML();
menu_xml.load("xmlTest.xml");
menu_xml.ignoreWhite = true;
//
menu_xml.onLoad = function() {
	_global.nbrMenuFirstLevel = this.childNodes[0].childNodes.length;
	_global.racine = this.childNodes[0];
 
	for (i=0; i<nbrMenuFirstLevel; i++) {
		_root.attachMovie("etiquette","menuItem"+i,i);
		_root["menuItem"+i]._x = 8;
		_root["menuItem"+i]._y = 30+(i*19);
		_root["menuItem"+i].nomElement = racine.childNodes[i].attributes.title;
		_root["menuItem"+i].derouleur.Enfants = racine.childNodes[i].childNodes;
		_root["menuItem"+i].derouleur.niveau1 = _root["menuItem"+i];
		_root["menuItem"+i].derouleur.profondeur = 1;
		_root["menuItem"+i].derouleur.y = _root["menuItem"+i]._y
		_root["menuItem"+i].derouleur.onPress = generateSubMenu;
	}
};
//
getProps = function (table, resultats, position, toExclude) {
	for (prop in table) {
		if (typeof(table[prop]) == "movieclip" && prop.substr(0, 8) == "menuItem") {
			if (table[prop] != toExclude) {
				trace(table+"."+prop+" Name:"+table[prop].nomElement+" H:"+table[prop].derouleur.y+" Position:"+position);
				if ( table[prop].derouleur.y > position ) {
					resultats.push(table[prop]);
				} else {
					getProps(table[prop], resultats, position);
				}
			}
		}
	}
};
 
replacerMenus = function (elt) {
	var decalY = 0;
	var resultats = [];
	getProps(_root, resultats, elt.derouleur.y, elt);
 
	for ( i=0; i<resultats.length; i++ ) {
		resultats[i]._y += 19*elt.derouleur.Enfants.length;
		resultats[i].derouleur.y += 19;
	}
	/*_global.destinationsMenus = [];
	for (i=0; i<nbrMenuFirstLevel; i++) {
		placeMenu = 30+decalY;
		destinationsMenus.push(placeMenu);
		decalY += _root["menuItem"+i]._height;
	}
	for (i=0; i<nbrMenuFirstLevel; i++) {
		_root["menuItem"+i].numeroEntree = i;
		_root["menuItem"+i].onEnterFrame = function() {
			this._y += (destinationsMenus[this.numeroEntree]-this._y)*0.2;
		};
	}*/
};
 
generateSubMenu = function () {
	if (this._currentframe == 1) {
		this.gotoAndStop(2);
		for (i=0; i<this.Enfants.length; i++) {
			tempo = this.niveau1.attachMovie("etiquette", "menuItem"+i, i);
			tempo._x = 10*this.profondeur;
			tempo._y = 19+(i*19);
			tempo.derouleur.profondeur = this.profondeur+1;
			tempo.nomElement = this.Enfants[i].attributes.title;
			tempo.derouleur.niveau1 = this.niveau1["menuItem"+i];
			tempo.derouleur.Enfants = this.Enfants[i].childNodes;
			tempo.derouleur.y = this.y+tempo._y
			tempo.derouleur.onPress = generateSubMenu;
		}
		replacerMenus(this.niveau1);
	} else {
		this.gotoAndStop(1);
		var resultats = [];
		for (i=0; i<this.Enfants.length; i++) {
			this.niveau1["menuItem"+i].removeMovieClip();
		}
		getProps(_root, resultats, this.y);
		for ( i=0; i<resultats.length; i++ )
			resultats[i].derouleur.y -= 19;
	}
	//
};
Je vous avouerai que ce n'est pas mon code le plus propre, mais bon, il faut que ça marche D'ABORD, l'optimisation vient après...

Le problème étant somewhat difficult à expliquer (je ne vois pas comment faire pour que mon explication soit claire et compréhensible), je vous recommande vivement de downloader le swf et le xml pour comprendre le bug de fonctionnement (le fla pour des tests si vous voulez, il y a un MovieClip inclus (invisible sur la scène))...

Vous voyez??

- Le "dépliage" du 1er niveau fonctionne (éléments-fils visibles, et élément-frère descendu)
- Le "repliage" de ce même 1er niveau pas. L'élément-frère de celui sur lequel on a cliqué continue à descendre au lieu de remonter à sa position initiale.
- Le "dépliage" du 2ème niveau fonctionne(il n'y a pas d'enfant pour les 2 premiers noeuds de niveau 2), mais l'affichage des enfants du 3ème noeud de niveau 2 se fait beaucoup trop bas)
- Le repliage du niveau 2 pose le même problème que pour le niveau 1.

Et les mêmes problèmes surviennent pour les niveau 3 et 4.

J'ai essayé de faire un code "récurssif" au maximum histoire de ne pas avoir à recoder un tel menu si la structure du XML venait à changer...

Bref, je ne demande pas que mon menu soit 100% fonctionnel, mais j'aimerais que vous m'aidez à résoudre le problème de repliage. Pourquoi les éléments-frères ne remontent-ils pas correctement??

Le reste, je chercherai par moi-même avant de faire éventuellement à nouveau appel à vous...

Merci d'avance pour votre aide!!
Fichiers attachés
Type de fichier : swf menu2.swf (1,3 Ko, 4 affichages)
Type de fichier : fla menu2.fla (65,5 Ko, 3 affichages)
Type de fichier : xml xmlTest.xml (1,2 Ko, 3 affichages)
__________________
Sans extrait de code, ne vous attendez à aucun miracle (sauf miracle) ...

...et n'oubliez pas: RTFM!!

Téléchargez FireBug pour Firefox (le paracétamol du développement web)

"MERCI" ne coûte rien, n'hésitez pas à vous en servir!
BnA est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h22.


 
 
 
 
Partenaires

Hébergement Web