Работаем с jQuery Countdown или как разместить на странице кучу счётчиков со своими значениями времени
ПафНутиЙ 12.03.2013 Блог 23603 17 комментариев
Всем привет!
Пост родился как ответ на вопрос, так что будет краткий, но содержательный.
Что потребуется?
Для реализации множества таймеров на одной странице без привязки к id блока и прочим элементам нам понадобится следующее:- Собственно скрипт jQuery Countdown
- Прямые руки.
Что будем с этим делать?
Самый простой и очевидный способ передачи данных о времени истечения таймера в скрипт - воспользоваться html5-атрибутомdata-*
им и воспользуемся:<li data-timer="2013, 5, 18,0,0,0"></li>
Главное чтобы формат даты в атрибуте
data-timer
должен быть таким: Год, Месяц, День, Час, Минута, Секунда
В итоге получим вот такую проверочную конструкцию:
<ul class="counters">Далее подключим к странице необходимые скрипты и библиотеки и напишем небольшой скрипт для обработки данных о счётчиках.
<li title="Этот таймер кончился" data-timer="2013,2,17,0,0,15"></li>
<li title="Тут указаны не все цифры" data-timer="2013,3,12"></li>
<li title="У этого ещё полно времени" data-timer="2015,4,17,0,0,0"></li>
<li data-timer="2013, 5, 18,0,0,0"></li>
</ul>
В скрипте всё прокомментировано, так что думаю в пояснениях нет необходимости:
jQuery(document).ready(function($) {
// для всех элементов, которые имеют атрибут data-timer, выполняем следующее действие
$("[data-timer]").each(function () {
// текущий элемент, обернутый в jquery
var $this = $(this);
// Получаем описание таймера
var timerDescription = $this.prop('title');
// Если у элемента есть title - прибавляем к нему двоеточие и пробел
if (timerDescription != false) {
timerDescription = timerDescription+': ';
};
// получили строку, разбили ее по ","
var dateArr = $this.data("timer").split(",");
// элементы массива - строки, а для new Date нужны числа
dateArr = $.map(dateArr, function (elem) {
return parseInt(elem);
});
// в html пишем "человеческие" месяцы, здесь преобразуем к js-месяцам
dateArr[1]--;
// конструируем даты
var date = new Date(dateArr[0], dateArr[1], dateArr[2], dateArr[3], dateArr[4], dateArr[5]);
// инициализируем таймер
$this.countdown({
// Берём дату из заранее заготовленной
until: date,
// Определяем шаблон вывода
layout:'{desc}<span>{d<}{dn} {dl} и {d>}'+
'{hn} {hl}, {mn} {ml}, {sn} {sl}</span>',
// Определяем описание
description: timerDescription
// Ну и про язык не забываем
}, $.countdown.regional['ru']);
});
});
И что дальше?
Дальше качаем архив с примером:
Изучаем как оно работает и внедряем себе
Самый простой вариант внедрить это решение в DLE - записывать значения таймеров в дополнительные поля и выводить примено вот так:Изучаем как оно работает и внедряем себе
<li data-timer="[xfvalue_timer]"></li>
Спасибо за внимание, надеюсь вы почерпнули немного знаний)
Картинка взята с dribbble