Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

.Ingrid.

Relógio Flash + ASP (SWF chama ASP o tempo todo)

Recommended Posts

Olá pessoal,

 

Estou com um problema num banner em que tenho 4 relógios flash analógicos com 4 fusos diferentes.

No AS ele chama um arquivo ASP e "imprime" a hora.

O problema que tenho é que ele está chamando o arquivo ASP constantemente, e preciso que ele chame apenas uma vez o arquivo e continue rodando os ponteiros pelo flash mesmo.

 

Segue abaixo o AS do frame inicial:

 

var counter=29;
var loader = new LoadVars();
loader.onLoad = function(success) {
 if(success) {
 // read your data here, e.g.
 _root.hora = this.hora; // suppose the server send back a variable x
	trace(_root.hora);
 }
}
this.onEnterFrame = function(){
	if(counter > 30){
		var sender = new LoadVars();
		sender.sendAndLoad("getdate.aspx", loader, "GET");
	counter = 0 ;
	}
	counter ++;
}

e esse é o AS com os fusos:

 

stop();
relogio1.fsAtual = -3;
relogio2.fsAtual = +6;
relogio3.fsAtual = 4;
relogio4.fsAtual = 8;



/////RELOGIO 1
r1.alphaTo(100,0.5,"linear");
r1.scaleTo(100,1.5,"easeoutElastic",0.1);
brasil.alphaTo(100,0.5,"linear",0.5);
relogio1.alphaTo(100,0.5,"linear",0.5);

/////RELOGIO 2
r2.alphaTo(100,0.5,"linear",0.5);
r2.scaleTo(100,1.5,"easeoutElastic",0.6);
india.alphaTo(100,1.5,"linear",1.1);
relogio2.alphaTo(100,0.5,"linear",1.7);

/////RELOGIO 3
r3.alphaTo(100,0.5,"linear",1);
r3.scaleTo(100,1.5,"easeoutElastic",1.1);
relogio3.alphaTo(100,1.5,"linear",1.1);
russia.alphaTo(100,0.5,"linear",1.7,function ():Void {
this._parent._parent.mcTextos.gotoAndPlay(2);
});

/////RELOGIO 4
r4.alphaTo(100,0.5,"linear",1.5);
r4.scaleTo(100,1.5,"easeoutElastic",1.6);
china.alphaTo(100,1.5,"linear",2.1);
relogio4.alphaTo(100,1.5,"linear",2.1);

linha.alphaTo(100,0.5,"linear",2.1);

e esse é o cod que faz os ponteiros girarem:

 

stop();
var counter = 28;
var time = 0;
var totTime = 0;
this.onEnterFrame = function(){
	if(counter >= 30){
		var arr:Array = _root.hora.split(":");
		seconds = Number(arr[2]);
		minutes = Number(arr[1]);
		hours = Number(arr[0]);
		
		hours = hours + (minutes/60);
		hours = hours +7;
		//minutes = minutes +30
		
		seconds = seconds*6; // calculating seconds
		minutes = minutes*6; // calculating minutes
		hours = hours*30; // calculating hours
		
		sec._rotation=seconds; // giving rotation property
		min._rotation=minutes; // giving rotation property
		hour._rotation=hours; // giving rotation property
		counter = 0;
		time++;
	}
	counter++;
}

 

 

Alguém me ajuda plzzz?

Preciso que não chame o arquivo "getDate.aspx" o tempo...

=)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá .Ingrid. e seja bem vindo ao fórum.

 

Quanto a sua dúvida, se quer que carregue o arquivo .asp apenas uma vez, tire a chamada do mesmo do "onEnterFrame" (que é uma espécie de "loop" finalizado de acordo com alguma condição). Se é realmente isso que eu entendi, aquele "onEnterFrame" é desnecessário...

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja que minha sugestão é dentro do que entendi e posso estar errado...

 

Onde:

var counter = 29;
var loader = new LoadVars();
loader.onload = function(success) {
	if (success) {
		// read your data here, e.g.
		_root.hora = this.hora;
		// suppose the server send back a variable x
		trace(_root.hora);
	}
};
this.onEnterFrame = function() {
	if (counter>30) {
		var sender = new LoadVars();
		sender.sendAndLoad("getdate.aspx", loader, "GET");
		counter = 0;
	}
	counter++;
};
Altere para:
var loader = new LoadVars();
loader.onLoad = function(success) {
	if (success) {
		// read your data here, e.g.
		_root.hora = this.hora;
		// suppose the server send back a variable x
		trace(_root.hora);
	}
};
loader.load("getdate.aspx");

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele não deu nenhum erro.

Porém não rodaram os ponteiros...

ele realmente fez apenas uma solicitação do arquivo "getdate.aspx" porém parece que ignorou os comandos de girar os ponteiros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiquei meio confuso agora... Neste caso então a animação dos relógios dependem diretamente do arquivo externo aspx, que deve ter apenas o retorno da hora atual do servidor. Se for isso terá que utilizar como antes mesmo...

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então, na verdade não...

pois no arquivo aspx só imprime a data

 

<%
    Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1))
    Response.Cache.SetCacheability(HttpCacheability.NoCache)
    Response.Cache.SetNoStore()
%>
&hora=<%=DateTime.Now().ToString("HH:mm:ss")%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas é isso mesmo, os ponteiros do relógio se movimentam de acordo com o retorno do aspx, que deve ser feita constantemente, caso contrário não haverá animação pois a variável ficará estática, para perceber isso basta reparar no seu cód. no terceiro bloco que postou inicialmente, nele contém um outro "onEnterFrame" que faz a leitura da variável em loop, explicando a cada leitura haverá um valor diferente de hora, isto que faz movimentar os ponteiros dos seus relógios...

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, agora acredito que deu pra você ver tudo o que acontece.

eu queria encontrar um jeito, sem ter que refazer tudo para que os ponteiros pegassem a hora uma vez apenas e rodassem sozinhos depois, e tirando o onEnterFrame acho que não dá?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se voce remover o onEnterFrame da parte onde retorna o valor da hora, não resolveria? Voce carrega uma vez e depois que carregou você finaliza deixa a variavel com um escopo global e utiliza ela no onEnterFrame dos ponteiros.

 

ABs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Solução simples para o seu problema :)

 

Crie um date

 

var date:Date = new Date();

 

Para que você vai fazer isso???

O que faz funcionar um relogio???

 

Os segundos :)

 

Se você ta trabalhando com um arquivo que fica puxando o tempo todo um arquivo aspx eh pq ele ta procurando tbm pelos segundos... então como você vai ter um tempo parado em relação aos outros o que você vai precisar eh adicionar os segundos...

 

 

Veja um exemplo de como eu fiz... para buscar 1 relogio com php:

var received = _root.dateinfo;
var startTime = _root.startTime;
//var received = "2010-12-27 23:20:00";
//var startTime = "2010-12-12 23:19:10";

var d:Array = new Array();
var h:Array = new Array();
var st:Array = new Array();
var dt:Array = new Array();
var arr:Array = new Array();
var arr2:Array = new Array();

arr = received.split(" ");
d = arr[0].split('-');
h = arr[1].split(':');

arr2 = startTime.split(" ");
dt = arr2[0].split('-');
st = arr2[1].split(':');


for(i = 0; i < d.length; i++){
	d[i] = parseInt(d[i]);
	h[i] = parseInt(h[i]);
	st[i] = parseInt(st[i]);
	dt[i] = parseInt(dt[i]);
}

var time = setInterval (getTime, 1000);
var days = 0;
var hours = 0;
var minutes = 0;
var seconds = 0;
var xfinal = 0;

function getTime(){
	var date:Date = new Date();
	if(date.getSeconds() == 0){
		st[1]=st[1]+1;
	}
	var fdate = Date.UTC(d[0],d[1],d[2],h[0],h[1],h[2]);
	var today = Date.UTC(dt[0],dt[1],dt[2],st[0],st[1],date.getSeconds());
	xfinal = fdate - today;
	xfinal = xfinal/1000;
	if(xfinal < 0){
		trace("00-00-00 00:00:00");
	}else {
		if(xfinal>86400) {
 	days = Math.floor(xfinal/86400);
 	xfinal = xfinal-(days*86400);
			//days = days/1000;
 	}else {
 	days = 0;
 	}
 	if(xfinal>3600) {
 	hours = Math.floor(xfinal/3600);
 	xfinal = xfinal-(hours*3600);
 	}else {
 	hours =0;
 	}
 	if(xfinal>60) {
 	minutes = Math.floor(xfinal/60);
 	xfinal = xfinal-(minutes*60);
 	seconds = xfinal;
		}else {
 	minutes = 0;
 	seconds = xfinal;
 	}
		if(days < 0){
			day.text = '0'+0;
			hr.text = '0'+0;
			min.text = '0'+0;
			sec.text = '0'+0;
			delete clearInterval(time);
		}else {
			if(days < 10){
				day.text = '0'+days;
			}else {
				day.text = days;
			}
			if(hours < 10){
				hr.text = '0'+hours;
			}else {
				hr.text = hours;
			}
			if(minutes < 10){
				min.text = '0'+minutes;
			}else {
				min.text = minutes;
			}
			if(seconds < 10){
				sec.text = '0'+seconds;
			}else {
				sec.text = seconds;
			}
		}
	}
}
getTime();

No meu caso o codigo eh um cadin grande...

Aqui:

var received = _root.dateinfo;

var startTime = _root.startTime;

 

Eu to recebendo as variaveis que foram imprimidas no flashvars...

você pode usar um loadVars e carregar o arquivo asp para carregar essas variaveis... ai depende de você

Como você pode ver minha data foi criada com - e a hora com :

 

Isso ai eh um contador de hora universal... ele vai sempre imprimir os dias que faltam, horas, minutos e segundos.

 

você vai ter que alterar para o que você quer... mas como você pode ver o principio do meu codigo eh exatamente isso que você quer... partir de uma hora travada... e subir os segundos fazendo com que o serviço funcione perfeitamente.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum, acabou que conseguí resolver meu problema.

Depois vou testar a sua sugestão.

Mas para quem tenha interesse, vou postar aqui a solução que encontrei:

 

#include "mc_tween2.as"
stop();
var loader = new LoadVars();
var roothora = "";
var nossadata:Date = new Date();
var counter = 0;

loader.onLoad = function(success) {
  if(success) {
    // read your data here, e.g.
    _root.hora = this.hora; // suppose the server send back a variable x

	//trace(this.hora);

	
	//18:23:33
	var hours = substring(this.hora,0,2);
	var minutes = substring(this.hora,4,2);
	var seconds = substring(this.hora,7,2);
	
	//trace(hours + ' ' + minutes + ' ' + seconds);
	
	nossadata.setHours(hours);
	nossadata.setMinutes(minutes);
	nossadata.setSeconds(seconds);
	
  }
}

var sender = new LoadVars();
sender.sendAndLoad("getdate.aspx", loader, "GET");



this.onEnterFrame = function(){
		
		
		if (counter > 30) {
			
			timestamp = nossadata.setTime(nossadata.getTime()+1000);
			stringhora = nossadata.getHours()+":"+nossadata.getMinutes()+":"+nossadata.getSeconds();
			
			_root.hora = stringhora;
			trace(counter + " >> " + _root.hora);
			counter = 0;
		}
		
		counter++;
}




Obrigada a todos que tentaram me ajudar aqui

=)

Compartilhar este post


Link para o post
Compartilhar em outros sites

A minha ideia eh +/- parecida com a sua rs :)

 

Soh que o meu tem outro proposito por isso o código eh um cadinho maior hehe

 

Mas que bom que resolveu :)

E obrigado por colaborar com a resolução

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

.Ingrid. só uma observação! No seu exemplo, o fps do seu filme deverá estar sincronizado com o contador, caso contrário o relógio não funcionará corretamente, para contornar esse eventual problema seria mais interessante trabalhar com o "setInterval" do que com o "onEnterFrame".

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.