基于 Cookie 的倒数计时器不起作用



编辑:由于答案,解决了一些问题,但是它仍然无法正常工作。现在,它显示了第一页加载上正确的倒计时,但是一旦设置了cookie并重新加载页面,它显示错误的时间,也会在每个重新加载下重新启动。我已经相应地更新了我的代码。

我已经在寻找解决方案已经好几天了,没有任何事情可以按照我的需要。我的目标非常简单 - 我需要一个计时器,该计时器可以倒数3天,然后重复。实际上,每个人(带有服务器定义的时间)或本地(取决于用户的第一次访问时间)可能是相同的。我需要它不要在页面重新加载或一天结束时刷新。

所以我得出的结论是我需要cookie:当您第一次输入页面时,计时器开始倒数3天,直到3天开始。如果您离开网站并在2天内到达,则剩下1天。如果您离开并在一周后再次来,则计时器开始又开始计数3天。

对于Coundown,我使用了Keith Wood的插件。对于Cookie,我使用Klaus Hartl的插件。到目前为止,这是我的代码:

$(document).ready(function(){
    if (!$.cookie('offerTimer')){
        var now = new Date(); 
        timerValue = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 3); 
        cookie = $.cookie('offerTimer', timerValue, { expires: 7, path: '/' });
    }else {
        cookie = $.cookie('offerTimer');
    }
    $('#until3d').countdown({until: cookie, format: 'HMS'});
    console.log('cookie is ' + cookie);
});

在首页加载(未设置cookie时)cookie返回:

offerTimer=Tue%20Jan%2007%202014%2000%3A00%3A00%20GMT%2B0800%20(%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D1%8F%D1%80%D1%81%D0%BA%D0%BE%D0%B5%20%D0%B2%D1%80%D0%B5%D0%BC%D1%8F%20(%D0%B7%D0%B8%D0%BC%D0%B0)); expires=Thu, 30 Jan 2014 09:09:37 GMT; path=/

第二次访问cookie返回:

Tue Jan 07 2014 00:00:00 GMT+0800 (Красноярское время (зима)) 

西里尔符号,因为我来自俄罗斯。我几乎确定我可能需要的只是使cookies以相应的格式返回日期,以便倒数功能正常工作。但是我不明白它如何显示第一个输出的正确时间...我还尝试将日期的格式设置为倒数插件的格式(我使用了其他插件),结果是相同或根本不起作用。

ps:我知道它很容易绕过这样的计时器,但是在这种情况下,这并不是一个问题。

编辑:多亏了User2310289。

,更改了代码

我终于设法使它起作用。解决方案很简单。

我使用插件使其变得更容易(当然,在jQuery中):

<script type="text/javascript" src="jquery.countdown.js"></script>
<script type="text/javascript" src="jquery.cookie.js"></script>
<script type="text/javascript" src="date.format.js"></script>

这是我的代码:

$(document).ready(function(){
    if (!$.cookie('offerTimer')){
        var now = new Date(); 
        timer = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 3);
        $.cookie('offerTimer', timer.format("yyyy, mm, dd"), { expires: 7, path: '/' });
    }
    var cookie = $.cookie('offerTimer');
    $('#until3d').countdown({until: new Date(cookie), format: 'HMS'});
});

我希望这对将来的人有帮助,因为我花了很长时间才弄清楚,而且我没有找到解决这项确切倒计时任务的解决方案。并感谢您指出的一些错误的答案!

语句

if (cookie === "undefined")

是一个问题。您不能将JavaScript undefined与字符串"undefined"进行比较。这就是您的代码未进入if条件的原因。

要么做

if (!cookie)

if (('' + cookie) === "undefined")

启动now未定义

var threeDays = new Date();
now.getFullYear(), now.getMonth(), now.getDay() + 3

也许像

中的第三个变量
threeDays.getFullYear(), threeDays.getMonth(), threeDays.getDay() + 3

我也想你想做

var timerValue = new Date(now.getFullYear(), now.getMonth(), now.getDay() + 3);

最后(也许)不确定的关键词不需要引号。

相关内容

  • 没有找到相关文章

最新更新