Сброс счетчика каждые 30 секунд - PullRequest
1 голос
/ 07 марта 2012

Хорошо, поэтому я использую плагин обратного отсчета jquery , и объявление ниже

$j(document).ready(function() {
$j('#clock').countdown( { to : "#{event.start_date.strftime("%Y:%m:%d:%H:%M")}", remaining : "#{event.start_date - Time.now}", display_on_complete : 'list', hide_on_complete : 'countdown' } );
});

это работает нормально, но каждые 30 секунд мне нужно обновлять отсчет времени со временем из этого вызова ajax

$j(document).ready(function() {
    function refresh() {
    $j.ajax({
    type: "GET",
    url: "http://developer.yahooapis.com/TimeService/V1/getTime?appid=YahooDemo&output=json",
    dataType: "jsonp",
    success: function(data){
    unix_timestamp = data.Result.Timestamp
    var json_date = new Date(unix_timestamp*1000);
    console.log(json_date);
    setTimeout(refresh, 30000);
    }
});

Как вы можете видеть, дата является переменной json_date ..... и мне нужно заменять Time.now в методе обратного отсчета каждые 30 секунд ... любые идеи о том, как этого добиться

1 Ответ

2 голосов
/ 07 марта 2012

Плагин jQuery-countdown-Timer не поддерживает установку произвольного оставшегося времени.

Кроме того, плагин не принимает remaining в качестве опции.(Также у него нет параметров display_on_complete или hide_on_complete`. Если вы ссылаетесь на неправильный плагин, пожалуйста, дайте мне знать.)

Если вы хотите, чтобы плагин имел произвольное оставшееся время, это ваша проблема, вы 'Мне нужно изменить плагин.

Я бы изменил строку 42 ~ 50 из jquery.countdown-timer.js на:

if (options.remaining) {
    seconds_remaining = options.remaining;
} else {
    // Split the specified date/time string into an array
    var date_elements = options.to.split(':');

    // Create Date objects for start and end date/times
    var end_date = new Date (date_elements[0], date_elements[1] - 1, date_elements[2], date_elements[3], date_elements[4]);
    var start_date = new Date();

    // Calculate number of seconds remain until end date/time
    seconds_remaining = (end_date.getTime() - start_date.getTime()) * .001;
}

И вызвал бы функцию обратного отсчета следующим образом в вашем вызове AJAX:

function refresh() {
    $j.ajax({
        type: "GET",
        url: "http://developer.yahooapis.com/TimeService/V1/getTime?appid=YahooDemo&output=json",
        dataType: "json", // your url doesn't have a callback, no need for jsonp
        success: function(data){
            unix_timestamp = data.Result.Timestamp
            var json_date = new Date(unix_timestamp*1000);

            $j('#clock').countdown({ remaining: (event.start_date - json_date) * .001 });

            setTimeout(refresh, 30000);
        }
    });
}

Предполагается, что объект event находится в области действия функции refresh, а $j - ваш объект jQuery.

Я мог бы полностью неверно истолковать ваш вопрос, поэтому дайте мне знать, если я.

...