Odliczanie czasu w JavaScript - dwa osobne odliczania


(Gorgoroth) #1

Witam.

Zwracam się do Was z zapewne prostym problemem, jednak dla mnie na chwilę obecną nie do przejścia. Google nie pomaga - wszystkie tematy takie same, sam śmietnik i właściwie żadnego problemu takiego jak mój.

Otóż mam skrypt który odlicza czas do pewnego konkretnego dnia i godziny - wszystko działa. Problem natomiast zaczyna się, gdy chcę mieć na stronie dwa odliczania.

Na przykład:

Do dnia 24.12.2010 pozostało: 0 dni, 0 h, 25 m, 16s

Do końca roku pozostało: 2 dni, 3 h, 24 m, 19s

Niestety (co oczywiste i logiczne) dwa takie same skrypty różniące się jedynie datą i ID w kodzie nie działają dobrze - widoczne jest tylko ostatnie odliczanie.

Oto kod JS:

function CD(d,o,t,x){return[x=~~(t=(d-o)/864e5),x=~~(t=(t-x)*24), x=~~(t=(t-x)*60),~~((t-x)*60)]}

function R(t)

{

	t=CD(new Date(2011,9,26,18,50,00),new Date());

	document.getElementById('odliczanie').innerHTML=' ' +t[0]+" dni, "+t[1]+" h, "+t[2]+" m, "+t[3]+"s";

	if(t[3]<0)document.getElementById('odliczanie').innerHTML='... to już za nami!';

	else setTimeout('R()',1e3);

}

onload=function()

{

	R();

}

Żadne moje pomysły nie odniosły zamierzonych skutków. Proszę o pomoc :slight_smile:


(Grzelix) #2

Słaba kreatywność

ale nazywają się tak samo tak? czyli dublujesz poprostu zapis funkcji

a teraz do rzeczy,

najprostszą zamianą w obecnej formie to zdublowanie funkcji czyli nazwanie jej np P

i do tego inny kontener inna data,

jednak poprawienie tego w sposób prawidłowy powinno sparametryzować funkcję i używać pojedynczej funkcji do wszystkich możliwych odliczań na stronie.


(Gorgoroth) #3

Raczej średnia znajomość JS.

Nie nazywają się tak samo. Przetestowałem różne kombinacje - funkcje zawsze nazywały się inaczej, raz w tym samym pliku, a raz w osobnych plikach. Brak rezultatów.

Gdyby to działało to nie byłoby tego tematu :wink: Chyba, że robię coś źle.

Obecnie próbuję upakować wszystko w jednym pliku odliczanie.js, który wygląda następująco:

function CD(d,o,t,x){return[x=~~(t=(d-o)/864e5),x=~~(t=(t-x)*24), x=~~(t=(t-x)*60),~~((t-x)*60)]}

function R(t)

{

	t=CD(new Date(2011,10,7,8,00,00),new Date());

	document.getElementById('odliczanie').innerHTML=' ' +t[0]+" dni, "+t[1]+" h, "+t[2]+" m, "+t[3]+"s";

	if(t[3]<0)document.getElementById('odliczanie').innerHTML='... to już za nami!';

	else setTimeout('R()',1e3);

}


function P(t){

	t=CD(new Date(2011,11,7,8,00,00),new Date());

	document.getElementById('odliczanie2').innerHTML=' ' +t[0]+" dni, "+t[1]+" h, "+t[2]+" m, "+t[3]+"s";

	if(t[3]<0)document.getElementById('odliczanie2').innerHTML='... to już za nami!';

	else setTimeout('P()',1e3);

}

onload=function(){R();}

onload=function(){P();}

Efekt jest taki, że widać tylko ostatnie (drugie) odliczanie. Co jest nie tak?


(Grzelix) #4
onload=function(){R();P();}

(Gorgoroth) #5

O to chodziło, bomba. Dzięki wielkie za pomoc! Nie myślałem, że to może, a nawet ma tak wyglądać... Dziękuję raz jeszcze! :slight_smile: