Foros del Web » Creando para Internet » Flash y Actionscript »

Ayuda con menu acordeon

Estas en el tema de Ayuda con menu acordeon en el foro de Flash y Actionscript en Foros del Web. Buenos días, Tengo un menú acordeón que me descargué de aquí http://www.visual-blast.com/flash/ac...le-flash-menu/ y me gustaría saber como puedo hacer para que se abra un determinado ...
  #1 (permalink)  
Antiguo 27/03/2008, 03:27
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 1
Ayuda con menu acordeon

Buenos días,

Tengo un menú acordeón que me descargué de aquí http://www.visual-blast.com/flash/ac...le-flash-menu/ y me gustaría saber como puedo hacer para que se abra un determinado menú al clickarlo en vez de al pasar por encima y que se cierre al clickarlo otra vez. No se muy bien como hacerlo y me estoy volviendo loco, por favor si alguien tiene un momento y puede ayudarme se lo agradezco, es muy poco código. La descarga está en la web que he puesto más arriba

Gracias anticipadas
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #2 (permalink)  
Antiguo 27/03/2008, 03:47
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 13 años, 4 meses
Puntos: 12
Re: Ayuda con menu acordeon

No me descargado el código fuente pero me temo que hay que sustituir el evento onRollOver por el evento onRelease, si es que está programado en AS2.
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge
  #3 (permalink)  
Antiguo 27/03/2008, 04:06
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 1
Re: Ayuda con menu acordeon

en el codigo no utiliza el evento onrollover, te invito a q te descargues el codigo y le eches un ojo y me cuentes
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #4 (permalink)  
Antiguo 27/03/2008, 04:38
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 13 años, 4 meses
Puntos: 12
Re: Ayuda con menu acordeon

Vale, le he echado un vistazo y la cosa se ha complicado cuando he visto que en vez de eventos onRollOver tiene eventos de colisión (hitTest). Eso siginifica que cuando la flechita colisiona con el menú, éste se abre (como un evento onRollOver).
Tiene solución y pasa por aplicar un evento escuchador al Mouse y coordinarlo con la colisión. Es decir, si hay colisión y se pulsa el mouse, pues que se abra el menú.
Te paso todo el código rectificado. Echa un vistazo a las diferencias (en azul):
Código:
stop();
var _on:Boolean = false;
var mouseListener:Object = new Object();
mouseListener.onMouseDown = function() {
	_on = true;
}
speed = 10;
initial_width = 75;
target_width = 450;
sp = rect1._x;
this.createEmptyMovieClip("emptymc", 0);
emptymc.onEnterFrame = function() {	
for (i=1; i<=6; i++) {
	if (_root.hit.hitTest(_root._xmouse, _root._ymouse, true)) {
		Mouse.addListener(mouseListener);
		if (_root["rect"+i].hitTest(_root._xmouse, _root._ymouse, true) && _on) {
			new_x = (_root.sp-(75*(i-1)))-rect1._x;
			rect1._x += new_x/speed;
			n_width = target_width-_root["rect"+i]._width;
			_root["rect"+i]._width += n_width/speed;
		} else {
			n_width2 = initial_width-_root["rect"+i]._width;
			_root["rect"+i]._width += n_width2/speed;
		}
	} else {
		_on = false;
		Mouse.removeListener(mouseListener);
		new_x = _root.sp-rect1._x;
		rect1._x += new_x/(speed+50);
		n_width2 = initial_width-_root["rect"+i]._width;
		_root["rect"+i]._width += n_width2/(speed-1);
	}
	_root["rect"+(i+1)]._x = _root["rect"+i]._x+_root["rect"+i]._width;
	_root["movie"+i]._x = _root["rect"+i]._x-1;
	}
};
Saludos!
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge
  #5 (permalink)  
Antiguo 27/03/2008, 05:17
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 1
Re: Ayuda con menu acordeon

Muchas gracias! voy a probarlo ahora mismo y a ver si lo comprendo
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #6 (permalink)  
Antiguo 27/03/2008, 05:22
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 1
Re: Ayuda con menu acordeon

Funciona perfecto! solo falta una cosilla, y es que cuando quite el cursor no se cierre el menú otra vez si no que tenga que clickarlo de nuevo para que vuelva al estado inicial

EDIT: lo más que consigo es que se quede fijo pero no que al clickar otra vez vuelva a su estado inicial
__________________
No soy vago, solo soy tímido ante el esfuerzo...

Última edición por werkham; 27/03/2008 a las 05:45
  #7 (permalink)  
Antiguo 27/03/2008, 05:51
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 1
Re: Ayuda con menu acordeon

Código:
stop();
var _on:Boolean = false;
var mouseListener:Object = new Object();
mouseListener.onMouseDown = function() {
	_on = true;
}
var mouseListener2:Object = new Object();
mouseListener2.onMouseDown = function() {
	_on = false;
}
speed = 10;
initial_width = 75;
target_width = 450;
sp = rect1._x;
this.createEmptyMovieClip("emptymc", 0);
emptymc.onEnterFrame = function() {	
for (i=1; i<=6; i++) {
	if (_root.hit.hitTest(_root._xmouse, _root._ymouse, true)) {
		Mouse.addListener(mouseListener);
		if (_root["rect"+i].hitTest(_root._xmouse, _root._ymouse, true) && _on) {
			new_x = (_root.sp-(75*(i-1)))-rect1._x;
			rect1._x += new_x/speed;
			n_width = target_width-_root["rect"+i]._width;
			_root["rect"+i]._width += n_width/speed;
		} else {
			n_width2 = initial_width-_root["rect"+i]._width;
			_root["rect"+i]._width += n_width2/speed;
		}
	} else {
                Mouse.addListener(mouseListener2);
		if(_root["rect"+i].hitTest(_root._xmouse, _root._ymouse, true) && !_on){
		new_x = _root.sp-rect1._x;
		rect1._x += new_x/(speed+50);
		n_width2 = initial_width-_root["rect"+i]._width;
		_root["rect"+i]._width += n_width2/(speed-1);
               }
               Mouse.removeListener(mouseListener);
               Mouse.removeListener(mouseListener2);
	}
	_root["rect"+(i+1)]._x = _root["rect"+i]._x+_root["rect"+i]._width;
	_root["movie"+i]._x = _root["rect"+i]._x-1;
	}
};
eso es lo que he hecho, he añadido otro listener que pone _on a false xo no se porque no funciona
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #8 (permalink)  
Antiguo 27/03/2008, 06:20
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 10 años, 9 meses
Puntos: 3
Re: Ayuda con menu acordeon

No puedo testear aquí (no tengo Flash), pero por jugar un poco, a ver como va esto:

Código:
Quito el código
Puede ser un destrozo.. ya que no puedo probarlo y deprisa y corriendo tampoco se da pa mas, pero la idea es que es el otro IF con el que hay que jugar.. xD

Última edición por c_keeper; 27/03/2008 a las 07:25
  #9 (permalink)  
Antiguo 27/03/2008, 06:23
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 10 años, 9 meses
Puntos: 3
Re: Ayuda con menu acordeon

Ademas, creo que podria ser conveniente quitar el otro else

Código:
Quito el código

Última edición por c_keeper; 27/03/2008 a las 07:25
  #10 (permalink)  
Antiguo 27/03/2008, 06:27
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 10 años, 9 meses
Puntos: 3
Re: Ayuda con menu acordeon

O alomejor no xD

testing testing
  #11 (permalink)  
Antiguo 27/03/2008, 06:29
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 1
Re: Ayuda con menu acordeon

voy a ello asias ahora te comento
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #12 (permalink)  
Antiguo 27/03/2008, 06:32
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 10 años, 9 meses
Puntos: 3
Re: Ayuda con menu acordeon

No creo que funcione >_<, diosss necesito probarrr xDD
  #13 (permalink)  
Antiguo 27/03/2008, 06:34
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 1
Re: Ayuda con menu acordeon

no, no funciona. El código que me dio mahalo funcionaba bien solo falta hacer que no se cierre al quitar el cursor
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #14 (permalink)  
Antiguo 27/03/2008, 06:39
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 10 años, 9 meses
Puntos: 3
Re: Ayuda con menu acordeon

Se cierra al hacer click ?

Entonces pruebo a partir del código de Mahalo, con su permiso.

Código:
Quito el código
No sé, pienso que ese else es el que hace que se cierre solo al quitar el raton de encima.

El Listener es mejor añadirlo al principio y quitarlo al final. Rectifico, eso tiene que estar donde estaba, perdón

Solo prueba a comentar/quitar esas lineas del else

Un saludo.

Última edición por c_keeper; 27/03/2008 a las 07:25
  #15 (permalink)  
Antiguo 27/03/2008, 06:58
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 1
Re: Ayuda con menu acordeon

efectivamente eso es lo q hace q se cierre al quitar el raton. Si quito ese else no va a cerrarse pero de ninguna forma.

He probado a quitarlo y no se cierra (weno en realidad se vuelve un poco loco) habrá q seguir investigando
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #16 (permalink)  
Antiguo 27/03/2008, 07:04
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 10 años, 9 meses
Puntos: 3
Re: Ayuda con menu acordeon

Seguimos a ciegas... prueba con ésto:

Código:
Quito el código
Hay algo que se me está escapando, seguro que al hacer click encima se cerraba cuando ya estaba abierto ?

Edito: Otra opción seria meter la acción en el onMouseDown

Última edición por c_keeper; 27/03/2008 a las 07:35
  #17 (permalink)  
Antiguo 27/03/2008, 07:14
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 1
Re: Ayuda con menu acordeon

no no nunca se ha cerrado al hacer click, eso es lo que quiero hacer. Ahora mismo se cierra al quitar el raton y quiero q se cierra al hacer click
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #18 (permalink)  
Antiguo 27/03/2008, 07:21
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 10 años, 9 meses
Puntos: 3
Re: Ayuda con menu acordeon

Ya decia yo que no veia forma de que se cerrara al hacer el click, pero te habia entendido que si lo hacia.

Has probado ese último "intento" ?
  #19 (permalink)  
Antiguo 27/03/2008, 07:25
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 1
Re: Ayuda con menu acordeon

Si y tampoco funciona, se vuelve un poco loco
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #20 (permalink)  
Antiguo 27/03/2008, 07:27
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 10 años, 9 meses
Puntos: 3
Re: Ayuda con menu acordeon

Bueno, pero concreta en qué y cómo "se vuelve loco"...

En cualquier caso luego en casa lo pruebo en un momentillo
  #21 (permalink)  
Antiguo 27/03/2008, 07:30
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 1
Re: Ayuda con menu acordeon

pues cuando abres un menu x primera vez no se abre del todo se ve el boton que qda a la izq, si pulsas el de la izquierda este se abre y se ve bastante el de la derecha, luego al quitar el raton y ponerlo se cierra todo, muy raro y dificil de explicar asi :)
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #22 (permalink)  
Antiguo 27/03/2008, 07:32
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 10 años, 9 meses
Puntos: 3
Re: Ayuda con menu acordeon

Otro intento:

Código:
Quito el código
Si aqui por probar que no quede xD
  #23 (permalink)  
Antiguo 27/03/2008, 07:35
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 10 años, 9 meses
Puntos: 3
Re: Ayuda con menu acordeon

Ahhhh vale, ya me imagino como va lo del else ese.

Despues en casa lo miro bien, podiendo probar en vez de hacer a ciegas y todo eso xD

El último código tampoco servirá, los quito todos para no confundir

Saludos.
  #24 (permalink)  
Antiguo 27/03/2008, 07:41
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 1
Re: Ayuda con menu acordeon

ok muchas gracias por la ayuda, estare atento al tema. Si consigo algo lo posteo
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #25 (permalink)  
Antiguo 27/03/2008, 08:23
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 13 años, 4 meses
Puntos: 12
Re: Ayuda con menu acordeon

El problema es que este programa se basa en un evento onEnterFrame continuo que contiene bucles. No es lo más indicado ni lo que yo haría, pero bueno...
Como alternativa te paso este otro ejemplo (basta cambiar todo el código anterior por éste):
Código:
stop();
import mx.transitions.Tween;
import mx.transitions.easing.*;
var _on:Boolean = false;
var timeTween:Number = 1;
var t1:Tween;
var t2:Tween;
var t3:Tween;
var t4:Tween;
var t5:Tween;
var t6:Tween;

for (var i:Number = 1; i<=6; i++) {
	var tmp:MovieClip = this["movie"+i];
	tmp.dest = i;
	tmp.onRelease = function() {
		_on = !_on;
		moveTweens(this.dest);
	}
}

function moveTweens(index:Number) {
	var main_tmp:MovieClip = this["movie"+index];
	if (_on) {
		this["t"+index] = new Tween(main_tmp,"_x",mx.transitions.easing.Regular.easeOut, main_tmp._x, 0, timeTween, true);
	} else {
		this["t"+index] = new Tween(main_tmp,"_x",mx.transitions.easing.Regular.easeOut, main_tmp._x, 75*(index-1), timeTween, true);
	}
	for (var i:Number = 1; i<=6; i++) {
		var tmp:MovieClip = this["movie"+i];
		if (i<index) {
			if (_on) {
				this["t"+i] = new Tween(tmp,"_x",mx.transitions.easing.Regular.easeOut, tmp._x, -75*(index-i), timeTween, true);
			} else {
				this["t"+i] = new Tween(tmp,"_x",mx.transitions.easing.Regular.easeOut, tmp._x, 75*(i-1), timeTween, true);
			}
		} else if (i>index) {
			if (_on) {
				this["t"+i] = new Tween(tmp,"_x",mx.transitions.easing.Regular.easeOut, tmp._x, 450+(75*(i-index)), timeTween, true);
			} else {
				this["t"+i] = new Tween(tmp,"_x",mx.transitions.easing.Regular.easeOut, tmp._x, 75*(i-1), timeTween, true);
			}
		}
	}
}
Es mucho más sencillo, emplea la clase Tween y no tiene un evento onEnterFrame funcionando continuamente y empleando recursos.
El problemilla: que todo el mc es botón. Pero es muy fácil de solucionar y es entrando en el modo de edición de cada mc (movie1, movie2,...,movie6), convertir la cabecera en símbolo (clip de película) y darle un nombre de instancia (que puede ser el mismo para todos (por ejemplo _btn).
Entonces localizas las líneas
Código:
for (var i:Number = 1; i<=6; i++) {
	var tmp:MovieClip = this["movie"+i];
	tmp.dest = i;
	tmp.onRelease = function() {
		_on = !_on;
		moveTweens(this.dest);
	}
}
Y las sustituyes por:
Código:
for (var i:Number = 1; i<=6; i++) {
	var tmp:MovieClip = this["movie"+i];
	tmp._btn.dest = i;
	tmp._btn.onRelease = function() {
		_on = !_on;
		moveTweens(this.dest);
	}
}
Si decides probarlo, hazte una copia de seguridad del tuyo, por si no te gusta. Y a cualquier pega, puedo pasarte el fla.
Saludos!
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge
  #26 (permalink)  
Antiguo 27/03/2008, 10:27
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 1
Re: Ayuda con menu acordeon

Muchísimas gracias funciona a la perfección. Voy a empaparme el código y a aprender algo nuevo MUCHAS GRACIAS
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #27 (permalink)  
Antiguo 27/03/2008, 11:06
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 13 años, 4 meses
Puntos: 12
Re: Ayuda con menu acordeon

Fíjate que el efecto easing de la clase Tween que le he puesto a las animaciones es siempre Regular. Puedes cambiarlo por Elastic, Bounce o Back, a tu gusto.
Y la variable que defino al principio como timeTween es el tiempo que tarda en realizar el movimiento en segundos. Cámbialo también a tu gusto.
Saludos!
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge
  #28 (permalink)  
Antiguo 27/03/2008, 12:24
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 10 años, 9 meses
Puntos: 3
Re: Ayuda con menu acordeon

Vaya telaka...

Sin cambiar el planteamiento del ejemplo inicial no hay forma de controlarlo con click, lo he medio conseguido pero seguia haciendo el loco de alguna forma o de otra.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:27.