ActionScript - Problema con Slideshow

 
Vista:

Problema con Slideshow

Publicado por Rodrigo (1 intervención) el 15/11/2010 22:10:17
Hola todos,
Estoy haciendo mi página y le quiero agregar un slideshow que te muestre mis promociones.
En el slideshow puse un TIMER para que a los 5 segundos cambie la imagen a la siguiente, también puse botones para que cuando le des click en el botón 1 o 2 o 3 te mande a la imagen 1 o 2 o 3.
Mi problema.
Todo corre perfectamente pero cuando le doy click a los botones (1 o 2 o 3) justo cuando está a punto de cambiar a la siguiente imagen (frame) se vuelve loco, y empieza a ir de la primer a la tercera imagen una y otra vez (Si le doy click en cualquier otro momento todo sigue bien, te manda a la imagen y sigue corriendo normal mente).

Les dejo mi código:

[AS]
stop();

//--- buttons 1 2 3 ---//

boton1.addEventListener (MouseEvent.CLICK, play1);

function play1 (event: MouseEvent):void {
gotoAndStop ("pban1");
}
boton2.addEventListener (MouseEvent.CLICK, play2);

function play2 (event: MouseEvent):void {
gotoAndStop ("pban2");
}
boton3.addEventListener (MouseEvent.CLICK, play3);

function play3 (event: MouseEvent):void {
gotoAndStop ("pban3");
}

//--- Timer ---//

var nextImagen:Timer = new Timer (5000);
nextImagen.addEventListener (TimerEvent.TIMER, playNext);
nextImagen.start();

function playNext(event:TimerEvent):void
{
nextFrame();
}
[/AS]

También cree un cuarto fotograma clave en blanco (blank frame) en la capa (layer) de las imágenes y le puse este código:

[AS]
nextImagen.stop();
nextImagen.reset();
gotoAndStop (1)
[/AS]

AHORA…
Que puedo hacer para solucionar este problema?
Se me ocurrió que quizás se pueda poner algo para que el TIMER se detenga cuando le das click en los botones 1 o 2 o 3… pero no sé cómo hacer eso(yo solo estoy dando ideas ya que la verdad no se si se pueda hacer esto o no, o si quisas aya otra mejor forma)

Espero me puedan ayudar :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problema con el slideshow al hacer clic en los botones

Publicado por Alejandro (369 intervenciones) el 27/06/2023 18:45:20
El problema que estás experimentando ocurre porque el evento del Timer y el evento del botón se están ejecutando al mismo tiempo, lo que causa un conflicto en la reproducción del slideshow. Para solucionar esto, puedes detener el Timer cuando se haga clic en alguno de los botones y reiniciar el Timer después de cambiar a la imagen correspondiente. Aquí tienes una solución posible:

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
stop();
 
//--- buttons 1 2 3 ---//
 
boton1.addEventListener(MouseEvent.CLICK, play1);
 
function play1(event:MouseEvent):void {
    nextImagen.stop(); // Detiene el Timer
    gotoAndStop("pban1");
    nextImagen.start(); // Reinicia el Timer después de cambiar a la imagen
}
 
boton2.addEventListener(MouseEvent.CLICK, play2);
 
function play2(event:MouseEvent):void {
    nextImagen.stop();
    gotoAndStop("pban2");
    nextImagen.start();
}
 
boton3.addEventListener(MouseEvent.CLICK, play3);
 
function play3(event:MouseEvent):void {
    nextImagen.stop();
    gotoAndStop("pban3");
    nextImagen.start();
}
 
//--- Timer ---//
 
var nextImagen:Timer = new Timer(5000);
nextImagen.addEventListener(TimerEvent.TIMER, playNext);
nextImagen.start();
 
function playNext(event:TimerEvent):void {
    nextFrame();
}
 
//--- Cuarto fotograma clave en blanco ---//
 
blankFrame.stop(); // Detiene la reproducción en el cuarto fotograma clave en blanco
blankFrame.resetTimer.addEventListener(MouseEvent.CLICK, resetAndPlay); // Agrega un evento de clic al botón para reiniciar y continuar la reproducción
 
function resetAndPlay(event:MouseEvent):void {
    blankFrame.resetTimer.removeEventListener(MouseEvent.CLICK, resetAndPlay); // Remueve el evento de clic para evitar ejecuciones múltiples
    nextImagen.reset();
    gotoAndStop(1);
    nextImagen.start(); // Reinicia el Timer después de volver al inicio del slideshow
}

En este código, se detiene el Timer con el método `stop()` cuando se hace clic en cualquiera de los botones, y luego se reinicia el Timer con `start()` después de cambiar a la imagen correspondiente. Además, se agrega un evento de clic al botón en el cuarto fotograma clave en blanco para reiniciar y continuar la reproducción.

Espero que esta solución te ayude a resolver el problema. ¡Buena suerte con tu proyecto!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar