FlipClock - несколько экземпляров - подсчет до определенной даты в обратном отсчете данных

Я пытаюсь сделать обратный отсчет FlipClock JS до даты, указанной в этой разметке:

<script>
    (jQuery)(document).ready(function() {
        clocks.push((jQuery)('.clock-1').FlipClock(3600, {
            countdown: true,
            clockFace: 'DailyCounter',
        }));
    });
</script> 

<div class="clock-1" data-countdown="15/07/2015 17:12:20" style="margin:2em;"></div>
<div class="message"></div>
<div class="clock-1" data-countdown="15/07/2015 23:19:35" style="margin:2em;"></div>
<div class="message"></div>
<div class="clock-1" data-countdown="16/07/2015 19:18:27" style="margin:2em;"></div>
<div class="message"></div>
<div class="clock-1" data-countdown="21/07/2015 16:47:40" style="margin:2em;"></div>
<div class="message"></div>
<div class="clock-1" data-countdown="21/07/2015 22:12:44" style="margin:2em;"></div>
<div class="message"></div>

Как и при использовании даты + времени от

data-countdown="21/07/2015 22:12:44"

А также делать это в нескольких экземплярах на одной странице (например, 8 разных обратных отсчетов на странице)

И мой другой вопрос: не будет ли это потреблять много ресурсов, помещая 8 из этих обратных отсчетов на страницу?

Вот мой пример JSFiddle

ЧИСТЫЙ: https://jsfiddle.net/jx0mmvLq/ (но скрипт теперь вообще не работает, потому что он похоже, я не могу импортировать JS-библиотеку FlipClock)

ГРЯЗНО: https://jsfiddle.net/haj070g3/1/ (пришлось добавить всю библиотеку в Раздел «скрипт» не мог заставить его загрузить его каким-либо другим способом)

Меня попросили опубликовать ссылки на Документы (но я могу опубликовать только 2 ссылки с моим текущим представителем)

http://flipclockjs.com/

person Karol Kierzkowski    schedule 11.07.2015    source источник
comment
Код в вашем JSFiddle представляет собой беспорядок, слишком трудный для чтения. Может, почистишь?   -  person alan0xd7    schedule 11.07.2015
comment
Я почистил его, но jsfiddle не хочет загружать библиотеку FlipClockJS по какой-то странной причине, а ЧИСТАЯ версия действительно не работает, в ГРЯЗНОЙ версии я очистил html, и это было все, что я мог сделать, не нарушая его.   -  person Karol Kierzkowski    schedule 11.07.2015
comment
Причина, по которой FlipClockJS не может быть загружен, заключается в том, что вам нужно, чтобы он обслуживался через HTTPS.   -  person alan0xd7    schedule 11.07.2015
comment
Как выглядят классные часы-1?   -  person Craig    schedule 10.07.2019


Ответы (2)


Итак, прежде всего, давайте изменим ваш формат даты: mm/dd/yyyy hh:mm:ss на yyyy/mm/dd hh:mm:ss.

Теперь ваш HTML-код выглядит так:

<div class="clock-1" data-countdown="2015/07/15 17:12:20" style="margin:2em;"></div>
<div class="message"></div>
<div class="clock-1" data-countdown="2015/07/15 23:19:35" style="margin:2em;"></div>
<div class="message"></div>
<div class="clock-1" data-countdown="2015/07/16 19:18:27" style="margin:2em;"></div>
<div class="message"></div>
<div class="clock-1" data-countdown="2015/07/21 16:47:40" style="margin:2em;"></div>
<div class="message"></div>
<div class="clock-1" data-countdown="2015/07/21 22:12:44" style="margin:2em;"></div>
<div class="message"></div>

Я вижу, что плагин не предоставляет возможность, когда вы можете применить плагин ко многим элементам. Итак, давайте сделаем это. Вам нужно использовать $.each и применять для каждого элемента этот плагин.

Кроме того, вам нужно преобразовать дату в метку времени. JavaScript предоставляет Date объект: new Date('yyyy/mm/dd hh:mm:ss').getTime(). Но это дает нам миллисекунды с 01.01.1970 00:00:00. Не проблема, просто разделите на 1000.

Еще одна вещь, которая вам нужна. Когда вы получаете секунды, вы получаете их с 01.01.1970, но вы хотите получить секунды к текущей дате в будущем. Итак, вы просто получаете текущее время и вычитаете его из будущей даты.

Итак, все эти действия выглядят так:

$(document).ready(function() {
    var clocks = [];

    $('.clock-1').each(function() {
        var clock = $(this),
            date = (new Date(clock.data('countdown')).getTime() - new Date().getTime()) / 1000;

        clock.FlipClock(date, {
            clockFace: 'DailyCounter',
            countdown: true
        });

        clocks.push(clock);
    });
});

Ну, в надежде, что это поможет вам.

И ваш последний вопрос, я думаю, он сработает.

person Slimmi    schedule 11.07.2015
comment
Спасибо за ваш ответ, он отлично работает :) не уверен насчет того, что ресурс съедает, это против одного счетчика, но я очень рад ужину, так что огромное спасибо - person Karol Kierzkowski; 11.07.2015
comment
@KarolKierzkowski это действительно зависит от аппаратного обеспечения пользователя. Не думаю, что 5 счетчиков столько съедят. - person Slimmi; 11.07.2015
comment
У меня есть вопрос, может быть, вы могли бы помочь мне с этим, как я могу изменить ваш код, чтобы добавить класс, если число меньше 60 минут или если количество больше или равно 100? - person Karol Kierzkowski; 23.07.2015
comment
Я действительно не понял, что вы имели в виду. Какой номер? обратный отсчет данных? - person Slimmi; 23.07.2015
comment
Спасибо за ответ! это таймер обратного отсчета, который отсчитывает дату в часах, и мне интересно, могу ли я настроить его так, чтобы в зависимости от количества оставшихся часов он добавлял другой класс, например, к .clock-1 - person Karol Kierzkowski; 23.07.2015
comment
переменная date хранит количество оставшихся часов в секундах. вы можете проверить это как - if (date <= 3600) { clock.addClass('someclass'); } - person Slimmi; 23.07.2015

Вам просто нужно перебрать все элементы .clock-1 и инициализировать их один за другим. Как это:

  (jQuery)('.clock-1').each(function(){

    var clock = (jQuery)(this).FlipClock(3600, {
        countdown: true,
        clockFace: 'DailyCounter',
    });

    clocks.push(clock);

  }); 

Демонстрация: https://jsfiddle.net/alan0xd7/haj070g3/2/

Что касается вашего вопроса об использовании ресурсов, вы можете просто проверить диспетчер задач Windows, пока ваша страница открыта, и определить, использует ли она слишком много ЦП или нет.

Обновление:

Для поддержки получения времени из атрибута данных:

  (jQuery)('.clock-1').each(function(){

    var time = (jQuery)(this).data("countdown");
    time = ((new Date(time))-(new Date().getTime()))/1000;

    var clock = (jQuery)(this).FlipClock(time, {
        countdown: true,
        clockFace: 'DailyCounter',
    });

    clocks.push(clock);

  }); 

https://jsfiddle.net/alan0xd7/haj070g3/4/

Обратите внимание, что формат даты в YYYY/MM/DD HH:MM:SS

person alan0xd7    schedule 11.07.2015
comment
это хорошее решение! но решает только половину проблемы вместо того, чтобы брать время из: FlipClock(3600, он должен брать дату окончания из data-countdown=21/07/2015 22:12:44, который является частью: ‹div class=clock- 1 data-countdown=15/07/2015 17:12:20 style=margin:2em;›‹/div› ‹div class=message›‹/div› - person Karol Kierzkowski; 11.07.2015
comment
Я вижу, я пропустил эту часть вопроса. Я обновил свой ответ сейчас. Обратите внимание, что вам нужно изменить формат даты, чтобы его можно было проанализировать с помощью JavaScript. - person alan0xd7; 11.07.2015
comment
@ alan0xd7 чувак, ты только что скопировал мое решение? В этом случае вы также можете скопировать мое объяснение. - person Slimmi; 11.07.2015
comment
Я не уверен, что вы имеете в виду, если вы проверите время в моем ответе, вы увидите, что я разместил это раньше вас. - person alan0xd7; 11.07.2015
comment
@alan0xd7 alan0xd7 о да, ваш первый ответ stackoverflow.com/revisions/31355967/1 - person Slimmi; 11.07.2015
comment
Да, изначально я пропустил информационную часть вопроса, на это указал Кароль, поэтому я вернулся и обновил его. - person alan0xd7; 11.07.2015
comment
@ alan0xd7 спасибо за ваш быстрый ответ и помощь, вы предоставили ответ так же хорошо, как Slimmi, и я рад, что вы уважаете использование (jQuery) вместо $ :) Drupal по какой-то странной причине действительно не любит $ в JS. Я решил дать ответ Slimmi, поскольку он был тем, кто первым предоставил полное решение. Спасибо за ваш блестящий вклад! - person Karol Kierzkowski; 11.07.2015
comment
если вы добавите var $ = jQuery; в начало вашего JS-файла, вы сможете нормально использовать $. - person alan0xd7; 11.07.2015