Javascript:知道实际的一秒何时被勾选?

标签 javascript jquery html

我有一个 setInterval 函数,它显示我网站上某个事件的剩余时间。但倒计时与秒的实际滴答声不同步。

我的代码使用 ajax 调用服务器来获取一次到期日期,成功后倒计时将开始。直到那里都很棒。

var request = new XMLHttpRequest();
request.open('GET', 'https://my-website/service.php', true);
request.onload = function() {
    if (request.status >= 200 && request.status < 400) {

        date = request.responseText;
        timer = setInterval(showRemaining, 1000);//start the countdown

    } else {
        // We reached our target server, but it returned an error
    }
};

但是调用setInterval的时间需要与秒的实际全局tick同步。

(我希望我说得有道理。我的意思是,调用需要与电脑或手机时钟的每一秒同步!)

我怎样才能实现这一目标?提前致谢!

最佳答案

您需要使用当前毫秒和下一个毫秒之间的差异来创建一个初始 setTimeout,即:

1000-(new Date().getMilliseconds())) 

然后就可以开始setInterval了

注意setTimeout/setInterval有一个最小值(一般认为是10ms),所以如果到下一秒小于该值,则加1000。

另请注意,setTimeout/setInterval 并非 100% 准确,但最接近的秒数可能就足够了。

这给出了您的成功代码:

 date = request.responseText; 

 var t = 1000-(new Date().getMilliseconds());
 if (t < 15) t+=1000;

 setTimeout(function() {
     timer = setInterval(showRemaining, 1000);//start the countdown
 }, t));

关于Javascript:知道实际的一秒何时被勾选?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45138931/

相关文章:

javascript - 浏览器窗口中的应用内 FB 页面插件链接

jquery - 在实现 css 中更改日期选择器的语言

javascript - 根据php对ajax请求的响应制作动态html表

javascript - 在上面的目录中找不到bower_components

javascript - 如何更改 iframe 的沙盒标志

javascript - 在 html 中显示带 Angular 产品

javascript - 尝试使用 axios 和 formData 发布数据,但它是空的

javascript - 如何使用ajax设置这个值

jquery - 远程数据: result object with different attributes.如何映射?

jquery - 从Chrome的日期类型输入中删除占位符