Es un script gratuito que encontre por la red, lo he modificado bastante, pero me queda un punto que se me escapa
Funciona todo perfecto, el unico problema es, que hay que pinchar en el boton para que comience, y yo quiero que empieze automaticamente al cargar el swf.
Dejo el codigo :
Código PHP:
// tutorial por tutoriales-flash.com ------
// ------------------------------------------
// coordenadas donde se ubicará el contador
var x0:Number = 25;
var y0:Number = 18;
// variable que almacena la fecha final
var fecha_final:Date;
// variable que almacena la fecha actual
var ahora:Date = new Date();
// variable para actualizar la cuenta con setInterval
// (dentro de función empezarCuenta)
var intervalo:uint;
// matriz donde almaceno los movieclips de los dígitos
var digitos_array:Array=new Array();
// variables que indican la separación entre
// digítos y entre grupos de dígitos
var separacion_digitos:uint = 17;
var separacion_grupos:uint = 29;
var contador_sp:Sprite = new Sprite();
contador_sp.x = x0;
contador_sp.y = y0;
addChild (contador_sp);
// asignamos al botón del iniciar la
// función empezarCuenta, que es la que
// inicia el proceso
iniciar_btn.addEventListener (MouseEvent.CLICK, empezarCuenta);
// y aquí la función en sí
function empezarCuenta (e):void {
// primero comprobamos
// si la fecha introducida es válida
if (esFechaValida()) {
trace("entro");
// creamos el contador con las posiciones de dígitos
// necesarias para mostrar la cuenta atrás según la
// fecha introducida por el usuario
crearContador ();
// detenemos la ejecución repetida de la funcion
// actualizarControlador, si existiese
clearInterval (intervalo);
// ejecutamos la función actualizarControlador
// cada 200 milisegundos, es decir 5 veces por segundo
intervalo = setInterval(actualizarContador, 200);
} else {
trace("no entro");
// si la fecha introducida no es válida paramos
// la ejecución y reseteamos el contador a ceros
clearInterval (intervalo);
if (digitos_array.length >= 1) {
for (var j:Number = 0; digitos_array[j]; j++) {
digitos_array[j].num_txt.text = "0";
}
}
}
}
// en esta función calculamos la diferencia entre
// la fecha introducida por el usuario y la fecha
// actual, para poder determinar el número de dígitos
// necesarios
function crearContador ():void {
// inicializamos el array que contendrá los
// clips de los dígitos
digitos_array = new Array();
// eliminamos los digitos que pueda haber dentro
// del contador
resetClip (contador_sp);
// mostramos los rótulos
quedan_mc.visible = true;
lHoras_mc.visible = true;
lMin_mc.visible = true;
lSeg_mc.visible = true;
// variable auxiliar para posicionar
// horizontalmente los clips de los dígitos
var proximaPosicionX:uint = 0;
// diferencia en segundos entre las dos fechas
var diffSegundos:uint = Math.round((fecha_final.getTime() - ahora.getTime()) / 1000);
// obtengo el número de días
var numDias:uint = Math.floor(diffSegundos / 86400);
// si el número de días es mayor que cero
if (numDias > 0) {
lDias_mc.visible = true;
lDias_mc.x = x0;
var numDias_str:String = numDias.toString();
// si el número de días es de dos o más cifras
// añadimos al clip contador cada uno de los clips
// de los dígitos
if (numDias_str.length > 1) {
for (var i:Number = 0; i < numDias_str.length; i++) {
var clipCelda:MovieClip =new celdaMC();
// posicionamos el dígito
clipCelda.x = proximaPosicionX;
proximaPosicionX += separacion_digitos;
contador_sp.addChild (clipCelda);
// añadimos el dígito a la matriz
digitos_array.push (clipCelda);
}
} else {
// si es de una cifra sólo, añadimos un dígito con el cero antes
var clipDia0:MovieClip = new celdaMC();
clipDia0.x = proximaPosicionX;
proximaPosicionX += separacion_digitos;
contador_sp.addChild (clipDia0);
digitos_array.push (clipDia0);
// añadimos la cifra del número de días
var clipDia1:MovieClip = new celdaMC();
clipDia1.x = proximaPosicionX;
proximaPosicionX += separacion_digitos;
contador_sp.addChild (clipDia1);
digitos_array.push (clipDia1);
}
// etiqueta dias
proximaPosicionX += separacion_grupos;
} else {
lDias_mc.visible = false;
}
// calculamos el número de horas
var restoHoras:Number = Math.round(diffSegundos % 86400);
var numHoras:Number = Math.floor(restoHoras / 3600);
// creamos los digitos de las horas de igual modo
var clipHora0:MovieClip = new celdaMC();
clipHora0.x = proximaPosicionX;
lHoras_mc.x = clipHora0.x + x0;
proximaPosicionX += separacion_digitos;
contador_sp.addChild (clipHora0);
digitos_array.push (clipHora0);
var clipHora1:MovieClip = new celdaMC();
clipHora1.x = proximaPosicionX;
proximaPosicionX += separacion_digitos;
contador_sp.addChild (clipHora1);
digitos_array.push (clipHora1);
proximaPosicionX += separacion_grupos;
// creamos los digitos de los minutos de igual modo
var restoMinutos:Number = Math.round(restoHoras % 3600);
var numMinutos:Number = Math.floor(restoMinutos / 60);
lMin_mc.visible = true;
var clipMin0:MovieClip = new celdaMC();
clipMin0.x = proximaPosicionX;
lMin_mc.x = clipMin0.x + x0;
proximaPosicionX += separacion_digitos;
contador_sp.addChild (clipMin0);
digitos_array.push (clipMin0);
var clipMin1:MovieClip = new celdaMC();
clipMin1.x = proximaPosicionX;
proximaPosicionX += separacion_digitos;
contador_sp.addChild (clipMin1);
digitos_array.push (clipMin1);
proximaPosicionX += separacion_grupos;
// creamos los digitos de los segundos de igual modo
var numSegundos:Number = Math.round(restoMinutos % 60);
lSeg_mc.visible = true;
var clipSeg1:MovieClip = new celdaMC();
clipSeg1.x = proximaPosicionX;
lSeg_mc.x = clipSeg1.x + x0;
proximaPosicionX += separacion_digitos;
contador_sp.addChild (clipSeg1);
digitos_array.push (clipSeg1);
var clipSeg2:MovieClip = new celdaMC();
clipSeg2.x = proximaPosicionX;
contador_sp.addChild (clipSeg2);
digitos_array.push (clipSeg2);
}
// esta es la funcion que se ejecuta a intervalos regulares
// de tiempo y que actualiza los dígitos del contador
// con los nuevos datos de la cuenta atrás
function actualizarContador ():void {
var contador_str:String = "";
var ahora_actualizado:Date = new Date();
var diffSegundos:Number = Math.round((fecha_final.getTime() - ahora_actualizado.getTime()) / 1000);
var numDias:Number = Math.floor(diffSegundos / 86400);
if (numDias > 0) {
contador_str += dosDigitos(numDias);
}
var restoHoras:Number = Math.round(diffSegundos % 86400);
var numHoras:Number = Math.floor(restoHoras / 3600);
contador_str += dosDigitos(numHoras);
var restoMinutos:Number = Math.round(restoHoras % 3600);
var numMinutos:Number = Math.floor(restoMinutos / 60);
contador_str += dosDigitos(numMinutos);
var numSegundos:Number = Math.round(restoMinutos % 60);
contador_str += dosDigitos(numSegundos);
for (var j:Number = 0; digitos_array[j]; j++) {
digitos_array[j].num_txt.text = contador_str.charAt(j);
}
}
// funciones auxiliares -----
// para comprobar que la fecha introducida es válida y posterior a la actual
function esFechaValida ():Boolean {
fecha_final = new Date(2011, 04, 23);
//trace(fecha_final.toString());
if (23<=31 && 05<=12 && fecha_final > ahora) {
trace("si");
return true;
} else {
trace("no");
return false;
}
}
// función para añadir un 0 delante en el
// caso de que sólo tenga una cifra
function dosDigitos (valor:uint):String {
if (valor > 9) {
return valor.toString();
} else {
return ("0" + valor.toString());
}
}
//
function resetClip (clip:DisplayObjectContainer):void {
while (clip.numChildren > 0) {
clip.removeChildAt (0);
}
}
La accion se realiza en la linea 22 :
iniciar_btn.addEventListener (MouseEvent.CLICK, empezarCuenta);
Supongo que sera cambiando esa linea, pero he probado mil cosas y nada, gracias