El evento mientras botón pulsado no me funciona
Buenos días,
a ver si alguien puede darme una idea de qué estoy haciendo mal...
Estoy utilizando CS4. Tengo una galería de imágenes en AS2, la galería consta de una imagen principal y las miniaturas correspondientes. Las miniaturas avanzan o retroceden según clico en las flechas. La cuestión es que avanza 1 cuando clico, pero lo que quiero es que se mueva mientras mantengo pulsado y pare cuando suelto la flecha. El código es:
function mover() {
if( total - start_from < 8 )
start_from = total - 8;
if( start_from < 1 )
start_from = 0;
position_x = start_from * distance_x - tn_area._x;
new Tween(tn_group, "_x", Strong.easeInOut, tn_group._x, - position_x, 1.2, true);
}
ss_previous.onPress = function()
{
start_from -=1
mover();
}
ss_next.onPress = function()
{
start_from +=1
mover();
}
Encontré que con setInterval podría hacerlo pero no consigo que funcione como quiero. Creo que hace el avance pero no se ve, hasta que no suelto el botón no hace nada.
function mover() {
if( total - start_from < 8 )
start_from = total - 8;
if( start_from < 1 )
start_from = 0;
position_x = start_from * distance_x - tn_area._x;
new Tween(tn_group, "_x", Strong.easeInOut, tn_group._x, - position_x, 1.2, true);
start_from +=1
}
ss_netx.onPress = function()
{
moverdurante=setInterval(mover, total);
}
ss_next.onRelease = function()
{
clearInterval(moverdurante);
}
¿alguien puede decirme qué estoy haciendo mal?
Muchas gracias de antemano!
Elhada
hola de nuevo,
ya está solucionado, lo dejo aquí por si a alguien le ayuda:
var longitud = i * distance_x; //longitud es lo que mide la tira de imágenes (tn_group)
var longitudbloque = 8* distance_x; //longitudbloque es lo que mide el área
function movermas() {
if (tn_group._x > longitudbloque - longitud + tn_spacing)
tn_group._x-= 3;
}
ss_next.onRollOver = function(){
durante = setInterval(movermas, total);
}
ss_next.onRollOut = function(){
clearInterval(durante);
}
function movermenos() {
if (tn_group._x < tn_area._x)
tn_group._x+= 3;
}
ss_previous.onRollOver = function(){
durante = setInterval(movermenos, total);
}
ss_previous.onRollOut = function(){
clearInterval(durante);
}
saludos ;)
Elhada
hola de nuevo Nheko,
ahora sí que funciona, pero el tema es que necesito delimitarlo para que no siga corriendo cuando acaba la galería. He probado varios modos que creía posibles pero no consigo que pare cuando debe.
function mover() {
if( total - start_from < 8 )
start_from = total - 8;
if( start_from < 1 )
start_from = 0;
if (start_from < total-8)
tn_group._x -= 5;
if (start_from >= total-8)
tn_group._x -= 0;
}
ss_next.onRollOver = function(){
durante = setInterval(mover, total);
}
ss_next.onRollOut = function(){
clearInterval(durante);
}
function mover() {
if( total - start_from < 8 )
start_from = total - 8;
if( start_from < 1 )
start_from = 0;
if (start_from < total) {
tn_group._x -= 5;} else {
tn_group._x -= 0
}
}
function mover() {
if( total - start_from < 8 )
start_from = total - 8;
if( start_from < 1 )
start_from = 0;
if(start_from < total -8)
tn_group._x -= 5;
if(total-8)
tn_group._x -= 0;
}
Y mil formas más intentado saber qué era lo que fallaba, ¿tienes alguna idea?
Gracias de antemano...
Elhada
Hola Nheko,
muchas gracias por la respuesta, ¡Nunca es tarde si la dicha es buena !
No conseguí resolverlo así que lo hice en plan chapucilla, pero voy a probar lo que dices para dejarlo bien. No se me había ocurrido probar con la fórmula tradicional... :S (cuando las cabezas se embotan...)
gracias de nuevo!
Nheko
Hola, no sé si llegaré a tiempo.
A mí sí que me funciona perfectamente, sólo que tienes el nombre del boton mal en el onPress: "ss_netx";
De todas formas, ten cuidado con varias cosas: Si estás usando Tween, tardará 1.2 segundos en hacer la animacion, si llamas en menos de ese tiempo de nuevo a la funcion con setInterval, se sobreescribirán los Tween. Si no necesitas algún efecto especial, yo probaría a mover de forma lineal la galeria ( tn_group._x += 2;) con un intervalo muy pequeño (cada 20ms, por ejemplo). Si quieres usar un easing, puedes hacerlo con la fórmula tradicional en vez de usando un Tween:
tn_group._x += (destino_x - posActual_x) / friccion;
Espero que te sirva!