Ir para conteúdo

POWERED BY:

Arquivado

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

Jhonei

[Resolvido] Problema ao chamar função com o setTimeout.

Recommended Posts

Galera, estou precisando de uma ajudinha neste meu script!!!

 

Quando dá a hora de chamar a função "trocaImg()" com o setTimeout, ele chama perfeitamente, mas ao invés de carregar a nova imagem, ele esta chamando a mesma imagem que a página carregou ao ser carregada inicialmente.

É como se ele chamasse a função mais não a atualizasse e só estivesse carregando o bloco de script que foi carregado ao entrar no site, ou seja, ele não esta fazendo a leitura das condições (if, else) da função chamada..

 

var d = new Date();
var hora = d.getHours();
var horaAtualemMilisegundos = (hora * 3600000) + (d.getMinutes() * 60000) + (d.getSeconds() * 1000) + d.getMilliseconds(); //transforma hora atual em milisegundos

var resto; // tempo restante para chamar a função na hora pre-determinada.

if ((hora >= 6) && (hora < 12)) { //manhã
	resto = 43200000 - horaAtualemMilisegundos; // tempo que resta para chamar a função as 12:00 hs.
} else if ((hora >= 12) && (hora <= 18)) { //tarde
	resto = 64800000 - horaAtualemMilisegundos; // tempo que resta para chamar a função as 18:00 hs.
} else if ((hora >= 0) && (hora < 6)) { //noite
	resto = 21600000 - horaAtualemMilisegundos; // tempo que resta para chamar a função as 06:00 hs.
} else { //noite de >18 e <0 horas
	clearInterval(chamaFuncao); //suspende a ação do setTimeout temporariamente
}

var chamaFuncao = setTimeout("trocaImg()",resto); //chama a função.

function trocaImg() { //Troca a imagem de manhã de tarde e de noite

	var imagem = "noite.jpg";

	if ((hora >= 6) && (hora < 12)) {
		imagem = "manha.jpg";
	} else if ((hora >= 12) && (hora < 18)) {
		imagem = "tarde.jpg";
	}

	document.getElementById('background').src = imagem;
}

 

Desde já estou agradeço pela ajuda dos senhores...

Compartilhar este post


Link para o post
Compartilhar em outros sites

        
               function trocaImg() { //Troca a imagem de manhã de tarde e de noite
               var imagem = "noite.jpg";
               if ((hora >= 6) && (hora < 12)) {
                       imagem = "manha.jpg";
               } else if ((hora >= 12) && (hora < 18)) {
                       imagem = "tarde.jpg";
               }   
               document.getElementById('background').src = imagem;
       }

 

Você só cometeu um pequenino erro na sua programação..

no caso do Javascript não se faz "if ((codigo1) && (codigo2))" e sim "if (codigo1 && codigo2)"... Então acho que basta arrumar esta parte

 

        
               function trocaImg() { //Troca a imagem de manhã de tarde e de noite
               var imagem = "noite.jpg";
               if (hora >= 6 && hora < 12) {
                       imagem = "manha.jpg";
               } else if (hora >= 12 && hora < 18) {
                       imagem = "tarde.jpg";
               }   
               document.getElementById('background').src = imagem;
       }

 

Pelo menos acho que é isso...

Se não for, faça um alert(hora) pra ver o que esta acontecendo com essa variavel

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu pela ajuda "Ismaeldm". Entendi o motivo de o script não ter funcionado!!!

 

Quando o setTimeout estava chamando a função ele não estava lendo a variável hora porque ela não estava dentro da função chamada, então ele estava usando a última hora memorizada pelo navegador.

 

Então eu fis isto:

function trocaImg() {
var d = new Date();
var hora = d.getHours();

	var imagem = "noite.jpg";

	if (hora >= 6 && hora < 12) {
		imagem = "manha.jpg";
	} else if (hora >= 12 && hora < 18) {
		imagem = "tarde.jpg";
	}
	document.getElementById('background').src = imagem;
}

 

Mas eu venho percebendo que o setTimeout é carregado com a página, recebe o tempo determinado para chamar a função e depois que chama a função ele fica inutilizado..

 

Como faço para que o setTimeout ao chamar a função na hora determinada já receba o tempo restante para chamar na próxima hora a função novamente?

 

Acredito que terei que mudar para o setinterval.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como faço para que o setTimeout ao chamar a função na hora determinada já receba o tempo restante para chamar na próxima hora a função novamente?

 

Acredito que terei que mudar para o setinterval.

 

hum, complicado, mas ja tentou adaptar algum while ou coisa do tipo? sei la, talvez você consiga...

 

eu fiz o seguinte

function hora() {
	var d = new Date();
       var hora = d.getHours();
       var horaAtualemMilisegundos = (hora * 3600000) + (d.getMinutes() * 60000) + (d.getSeconds() * 1000) + d.getMilliseconds(); 
       var resto;
       if ((hora >= 6) && (hora < 12)) {
               resto = 43200000 - horaAtualemMilisegundos; 
       } else if ((hora >= 12) && (hora <= 18)) { 
               resto = 64800000 - horaAtualemMilisegundos;
       } else if ((hora >= 0) && (hora < 6)) { 
               resto = 21600000 - horaAtualemMilisegundos;
       } else { 
               clearInterval(chamaFuncao); 
       }
       var chamaFuncao = setTimeout("trocaImg()",resto)
}
       function trocaImg() {
       var d = new Date();
       var hora = d.getHours();

               var imagem = "noite.jpg";

               if (hora >= 6 && hora < 12) {
                       imagem = "manha.jpg";
               } else if (hora >= 12 && hora < 18) {
                       imagem = "tarde.jpg";
               }
               document.getElementById('background').src = imagem;
			var chamaFuncao = setTimeout("hora()",1)
       }

funcionou, agora só adapta aí

 

eu fiz o seguinte

function hora() {
	var d = new Date();
       var hora = d.getHours();
       var horaAtualemMilisegundos = (hora * 3600000) + (d.getMinutes() * 60000) + (d.getSeconds() * 1000) + d.getMilliseconds(); 
       var resto;
       if ((hora >= 6) && (hora < 12)) {
               resto = 43200000 - horaAtualemMilisegundos; 
       } else if ((hora >= 12) && (hora <= 18)) { 
               resto = 64800000 - horaAtualemMilisegundos;
       } else if ((hora >= 0) && (hora < 6)) { 
               resto = 21600000 - horaAtualemMilisegundos;
       } else { 
               clearInterval(chamaFuncao); 
       }
       var chamaFuncao = setTimeout("trocaImg()",resto)
}
       function trocaImg() {
       var d = new Date();
       var hora = d.getHours();

               var imagem = "noite.jpg";

               if (hora >= 6 && hora < 12) {
                       imagem = "manha.jpg";
               } else if (hora >= 12 && hora < 18) {
                       imagem = "tarde.jpg";
               }
               document.getElementById('background').src = imagem;
			var chamaFuncao = setTimeout("hora()",1)
       }

funcionou, agora só adapta aí

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.