Как разместить на странице кучу счётчиков со своими значениями времени

Как разместить на странице кучу счётчиков со своими значениями времени


Работаем с jQuery Countdown или как разместить на странице кучу счётчиков со своими значениями времени.
Простой способ реализации множественных таймеров на странице на основе jQuery Countdown и html5.

Что потребуется?
Для реализации множества таймеров на одной странице без привязки к id блока и прочим элементам нам понадобится следующее:
1) Собственно скрипт jQuery Countdown
2) Прямые руки.

Что будем с этим делать?
Самый простой и очевидный способ передачи данных о времени истечения таймера в скрипт - воспользоваться 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>

Спасибо за внимание, надеюсь вы почерпнули немного знаний)

Автор: ПафНутий
Источник: dle-faq

Добавить комментарий

Нам важно знать ваше мнение. Оставьте свой отзыв или ответ

    • bowtiesmilelaughingblushsmileyrelaxedsmirk
      heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
      winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
      worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
      expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
      disappointedconfoundedfearfulcold_sweatperseverecrysob
      joyastonishedscreamtired_faceangryragetriumph
      sleepyyummasksunglassesdizzy_faceimpsmiling_imp
      neutral_faceno_mouthinnocent

Комментариев 0

Новые обсуждения на Форуме