Консультация № 187915
27.09.2014, 16:58
99.51 руб.
0 2 1
Здравствуйте! Прошу помощи в следующем вопросе:
Нужна помощь с таймером.
Есть функция которая просто выводит оставшееся время:
Код:
function time_left($tl){
$d=3600*24;
$day=floor($tl/$d);
$tl=$tl-($d*$day);

$hour=floor($tl/3600);
$tl=$tl-(3600*$hour);

$minute=floor($tl/60);
$tl=$tl-(60*$minute);

$second=floor($tl);

$dayt="".($day>0?"$day д. ":null)."";
$hourt="".($hour>0?"$hour ч. ":null)."";
$minutet="".($minute>0?"$minute мин. ":null)."";
$secondt="".($second>0?"$second сек. ":null)."";
if($day>0){
$minutet=NULL;
$secondt=NULL;
}
if($hour>0 && $day==0){
$secondt=NULL;
$dayt=NULL;
}
return "$dayt$hourt$minutet$secondt";
}


Вот код где данная функция подключается:
Код:
<span class='text_gr'>Осталось времени ".time_left($post['time']-$time)."</span>


Значение $post['time'] берется из БД MySql, от него отнимается текущее время $time и разница между ними и есть обратный отсчет, который должен идти до нуля.

Так вот данное время отсчета обновляется только с обновлением страницы, а нужно что бы отсчет шел без обновления страницы. Нужен JS скрипт, наброски кое какие есть, но так как я ноль в JS, то не знаю что делать дальше.

Вот нашел скрипт на JS, вроде то что нужно, но как его связать с временем которое берется из БД не знаю:

Код:
function CalcTimePercent(i, lastpayment, nextpayment, t, p) {

perc = (t - lastpayment) * 100 / (nextpayment - lastpayment);
document.getElementById('percentline'+i).style.width = perc+'%';

var time = nextpayment - t;
var hour = parseInt(time / 3600);
if ( hour < 1 ) hour = 0;
time = parseInt(time - hour * 3600);
if ( hour < 10 ) hour = '0'+hour;

var minutes = parseInt(time / 60);
if ( minutes < 1 ) minutes = 0;
time = parseInt(time - minutes * 60);
if ( minutes < 10 ) minutes = '0'+minutes;
var seconds = time;
if ( seconds < 10 ) seconds = '0'+seconds;

timer = hour+':'+minutes+':'+seconds;
document.getElementById('deptimer'+i).innerHTML = timer;

if(timer == "00:00:00") {
top.location.href='/myfarm/';
}

t = t + 1;
setTimeout("CalcTimePercent("+i+", "+lastpayment+", "+nextpayment+", "+t+", "+p+")",1000);
}


Кто может помочь пишите. Мой скайп: korsars.tm1
Помощь будет оплачена.

Обсуждение

давно
Старший Модератор
31795
6196
28.09.2014, 00:32
общий
Cмотрели в сторону cookie?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
312929
1973
01.10.2014, 09:59
общий
это ответ
Здравствуйте, Ковалёв Константин Викторович!

В первом приближении должно быть примерно так:
[code lang=html]
echo "
<html>
<body onload="time_left('tl', ".($_POST['time']-time()).")">
<script>
function time_left(id, time)
{
var day = parseInt(time / 86400);
if (day < 10) dayt = '0'; else dayt = '';
var second = parseInt(time - day * 86400);
var hour = parseInt(second / 3600);
if (hour < 10) hourt = '0'; else hourt = '';
second = parseInt(second - hour * 3600);
var minute = parseInt(second / 60);
if (minute < 10) minutet = '0'; else minutet = '';
second = parseInt(second - minute * 60);
if (second < 10) secondt = '0'; else secondt = '';
if (day < 1) dayt = ''; else dayt += day + ' д. ';
if (hour < 1) hourt = ''; else hourt += hour + ' ч. ';
if (minute < 1 || time >= 86400) minutet = ''; else minutet += minute + ' мин. ';
if (second < 1 || time >= 3600) secondt = ''; else secondt += second + ' сек. ';
document.getElementById(id).innerHTML = 'Осталось времени ' + dayt + hourt + minutet + secondt;
if (time > 0) setTimeout("time_left('"+id+"', "+(time-1)+")",1000);
}
</script>
<span class='text_gr' id='tl'></span>
</body>
</html>";
[/code]

Здесь первым параметром в функцию time_left должен передаваться id того элемента, в который нужно выводить отсчет (в данном случае - tl), вторым - оставшееся время в секундах. Функция time_left рекурсивно вызывает сама себя с задержкой в 1000 мсек, выводя каждый раз время на 1 секунду меньше, пока оно не уменьшится до 0. Первый раз она вызывается при загрузке страницы через onload в теге <body>
Форма ответа