Говоря о таймере обратного отсчета следует учесть тот факт, что таймеры делятся на два вида, точнее сказать, их употребление бывает разное. В одном случае счетчику задается конечная дата, в другом же задается количество времени, отсчет ведется для каждого пользователя отдельно (этот вариант подходит для тех, кто проводит какие-то акции или скидки).
1. HTML
Для разметки построим контейнер блоков, каждый элемент которого будет отвечать за определенную часть времени, то есть секунды, минуты, часы, дни и недели.
<div id="countdown"> <div id="week">недель: <span>00</span></div> <div id="day">дней: <span>00</span></div > <div id="hour">часов: <span>00</span></div > <div id="minute">минут: <span>00</span></div > <div id="second">секунд: <span>00</span></div > </div>
2. CSS
Все вложенные блоки сделаем невидимыми и показывать будем только те, которые включены в настройках.
Сначала подключим свой шрифт с Google Fonts:
@import url(//fonts.googleapis.com/css?family=Open+Sans+Condensed:300&subset=latin,cyrillic);
Задаем стандартные параметры для документа:
html,body { margin:0px; padding:0px; font-family:'Open Sans Condensed',Arial,serif; }
Остается написать классы для самого счетчика. Блок с таймером выровняем по центру и укажем auto-размер. Точные размеры будем задавать с помощью скрипта.
#countdown { margin:0px auto; width:auto; padding:20px 20px 20px 10px; position:relative; border:#222 2px solid; background:#eee; } #countdown div { margin:0px 0px 0px 10px; float:left; width:88px; } #countdown div span { display:block; height:53px; background:#000; border-bottom:#f00 1px solid; color:#eee; font-size: 24pt; padding-top: 4px; padding-left: 16px; letter-spacing: 31px; /* Последние 4 параметра отвечают за размер текста и его выравнивание на циферблате */ } #countdown #week,#countdown #day,#countdown #hour,#countdown #minute,#countdown #second { display:none; } .clear { clear:both; float:none !important; }
3. PHP
Как и говорилось ранее, в таймере предусмотрим два варианта, это отсчет времени к определенной дате (например, 1 мая 2018 года) и таймер по заданному времени (например, 12 часов). Этот выбор мы сделаем в настройках скрипта.
$countdown_setting = array( "type" => "date", /* date или time, date - отсчет до указанной даты, time - отсчет указанного времени */ "cookie" => true, /* true или false, запоминать время, только для режима time */ "position" => "vertical", /* horizontal или vertical, положение блока */ "date" => array( "year" => 2014, "month" => 4, "day" => 15, "hour" => 12, "minute" => 0, "second" => 0 ), /* указывается конечная дата, для режима date */ "time" => array( "week" => 0, "day" => 2, "hour" => 10, "minute" => 0, "second" => 0 ), /* указывается время, для режима time */ "visible" => array( "week" => array("none","недель:"), "day" => array("block","дней:"), "hour" => array("block","часов:"), "minute" => array("block","минут:"), "second" => array("block","секунд:") ) /* настройка отображения блоков, block - показывать соответствующий блок, none - не показывать; второй параметр - заголовок блока */ );
Поскольку видимость блоков (дни, минуты и т.д.) задается в конфиге, необходимо сделать генерацию html-кода:
$script = ''; $countdown_txt = ''; $block_count = 0; /* Генерация html кода таймера */ foreach($countdown_setting['visible'] AS $i => $v) { $countdown_txt .= '<div id="'.$i.'" style="display:'.$v[0].';">'.$v[1].' <span>00</span></div>'; $script .= '<script type="text/javascript">var countdown_'.$i.' = "'.$v[0].'";</script>'; if($v[0] == 'block') $block++; } if($countdown_setting['position'] == 'vertical') $block = 1; $script .= '<script type="text/javascript">var block_count = '.$block.';</script>';
Обработку времени будем делать на PHP с учетом серверного времени, чтобы время не зависело от настроек времени конечного пользователя, как это бывает при использовании Javascript:
/* обработка, когда указано время отсчета */ if($countdown_setting['type'] == 'time') { $time_value = $countdown_setting['time']['week']*7*60*60*24+$countdown_setting['time']['day']*60*60*24+$countdown_setting['time']['hour']*60*60+$countdown_setting['time']['minute']*60+$countdown_setting['time']['second']; $time_new = $time+$time_value; /* обработка кукисов */ if($countdown_setting['cookie']) { $time_cookie = (int) $_COOKIE['time']; if($time_cookie==0) { setcookie("time",$time_new); } else { $time_value = $time_cookie-$time; } } $script .= '<script type="text/javascript">var timeleft='.$time_value.';</script>'; } elseif ($countdown_setting['type'] == 'date') { /* обработка, когда указана конечная дата */ $time_value = mktime($countdown_setting['date']['hour'],$countdown_setting['date']['minute'],$countdown_setting['date']['second'],$countdown_setting['date']['month'],$countdown_setting['date']['day'],$countdown_setting['date']['year']); $time_value = $time_value-$time; $script .= '<script type="text/javascript">var timeleft='.$time_value.';</script>'; }
4. Javascript
Первое что нам необходимо, это подключить фреймворк jQuery (о способах подключения можно почитать здесь)
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>
Опишем функцию countdown_go(), она будет отвечать за вывод времени в блоки. При знаниях JS, функцию можно оптимизировать.
function countdown_go() { timeleft_func = timeleft; if(countdown_week=='block') { timevalue = Math.floor(timeleft_func/(7*24*60*60)); timeleft_func -= timevalue*7*24*60*60; if(timevalue<10) timevalue = '0'+timevalue; $("#week span").html(timevalue); } if(countdown_day=='block') { timevalue = Math.floor(timeleft_func/(24*60*60)); timeleft_func -= timevalue*24*60*60; if(timevalue<10) timevalue = '0'+timevalue; $("#day span").html(timevalue); } if(countdown_hour=='block') { timevalue = Math.floor(timeleft_func/(60*60)); timeleft_func -= timevalue*60*60; if(timevalue<10) timevalue = '0'+timevalue; $("#hour span").html(timevalue); } if(countdown_minute=='block') { timevalue = Math.floor(timeleft_func/(60)); timeleft_func -= timevalue*60; if(timevalue<10) timevalue = '0'+timevalue; $("#minute span").html(timevalue); } if(countdown_second=='block') { timevalue = Math.floor(timeleft_func/1); timeleft_func -= timevalue*1; if(timevalue<10) timevalue = '0'+timevalue; $("#second span").html(timevalue); } timeleft-=1; return false; }
Последнее, что осталось, это запустить таймер, здесь используем стандартную функцию setInterval().
$(document).ready(function() { setInterval(countdown_go,1000); $("#countdown").css('width',(block_count*98)+'px'); return false; });
Посмотреть ДЕМО и скачать ИСХОДНИКИ.
Как установить на сайт?
Если вы не хотите разбираться и устанавливать, можете просто скачать исходники, создать на сайте папку countdown и залить туда файлы. А далее на сайт вставить через фрейм:
<iframe src="ваш_сайт/countdown/index.php" width="указать высоту" height="указать ширину" frameborder="0"></iframe>
Советую обратить внимание на более усовершенствованный, бесплатный таймер с админпанелью и видеоинструкцией, скачать можно здесь.
Вот и все, остались вопросы — задаем в комментариях.