【问题标题】:FlipClock - Multiple instances - Counting to specific date in data-countdownFlipClock - 多个实例 - 在数据倒计时中计数到特定日期
【发布时间】:2015-07-11 08:30:42
【问题描述】:

我正在尝试使 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 示例

CLEAN:https://jsfiddle.net/jx0mmvLq/(但脚本现在根本不起作用,因为我好像无法导入 FlipClock JS 库)

DIRTY:https://jsfiddle.net/haj070g3/1/(必须在“脚本”部分添加整个库,无法以任何其他方式加载它)

我被要求发布到 Docs 的链接(但我只能发布 2 个与我当前的代表的链接)

http://flipclockjs.com/

【问题讨论】:

  • JSFiddle 中的代码一团糟,难以阅读。也许你可以把它清理干净?
  • 我清理了它,但 jsfiddle 出于某种奇怪的原因不想加载 FlipClockJS 库,并且 CLEAN 版本并没有真正工作,在 DIRTY 版本中我清理了 html,这是我唯一可以做的打破它
  • FlipClockJS 无法加载的原因是您需要通过 HTTPS 服务。
  • 类“clock-1”是什么样的?

标签: javascript jquery countdown countdowntimer flipclock


【解决方案1】:

所以,首先,让我们将日期格式: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()。但它给了我们自 1970/01/01 00:00:00 以来的毫秒数。除以 1000 没问题。

您还需要一件事。当您获得秒数时,您从 1970/01/01 开始获得它,但您希望在未来的当前日期获得秒数。因此,您只需获取当前时间并从未来日期中减去它。

所以所有这些动作看起来像:

$(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);
    });
});

嗯,希望对你有帮助。

你的最后一个问题,我认为它会运作良好。

【讨论】:

  • 感谢您的回答,效果很好 :) 不确定资源是否耗尽,这与单个计数器相比,但我很高兴非常感谢
  • @KarolKierzkowski 这真的取决于用户的硬件。我不认为 5 个柜台会吃掉这么多。
  • 我有一个问题,也许你可以帮我解决这个问题,如果数字低于 60 分钟,或者数量大于或等于,我该如何修改你的代码以添加一个类到 100 ?
  • 我并没有真正理解你的意思。号码多少?数据倒计时?
  • 感谢您的回复!它是倒计时计时器,以小时为单位倒计时,我想知道我是否可以设置它,以便根据“剩余小时数”它会为 .clock-1 添加不同的类,例如
【解决方案2】:

您只需要遍历所有.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任务管理器,确定它是否使用过多的CPU。

更新:

支持从数据属性中获取时间:

  (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

【讨论】:

  • 那是很好的解决方案!但只解决了一半的问题,而不是花费时间: FlipClock(3600, 它应该从 data-countdown="21/07/2015 22:12:44" 中获取“结束日期”,它是:
    跨度>
  • 我明白了,我错过了问题的那一部分。我现在更新了我的答案。请注意,您需要更改日期格式,以便它可以被 JavaScript 解析。
  • @alan0xd7 老兄,你是不是抄袭了我的解决方案?这种情况,你也可以复制我的解释。
  • 我不太清楚你的意思,如果你查看我的答案的时间,你可以看到我在你之前发布的。
  • @alan0xd7 哦,是的,你的第一个答案stackoverflow.com/revisions/31355967/1
猜你喜欢
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
相关资源
最近更新 更多