首页 > 解决方案 > Javascript Timer 不一致

问题描述

代码运行一段时间后,倒数计时器并不一致,并留下数秒的间隙。它仍然继续倒计时,但会在特定计数上停留几秒钟,然后在几秒钟后用另一个数字刷新。

这是倒计时功能。有任何想法吗?

function countdownTimer(){

  //--Countdown til next TIME
  //--First, let's get today's date to do the calculation later
  var dM = new Date();
  var months = ["January","February","March","April","May","June","July","August","September","October","November","December"];
  var todayMonth = months[dM.getMonth()];

  var dD = new Date();
  var todayDate = dM.getDate();



  var dY = new Date();
  var todayYear = dM.getFullYear();



  //--Then let's set the countdown time to the next TIME

  if(window.nextTime == fajrTime){

    var tomorrow = todayDate + 1;
    var todayDate =   tomorrow + " " + todayMonth + "," + todayYear + " " + window.nextTime;

  }else{
    var todayDate =   todayDate + " " + todayMonth + "," + todayYear + " " + window.nextTime;

  }



  //-- Let's do the countdown calculation
  var deadline = new Date((todayDate)).getTime();
window.x = setTimeout(function() {

  var now = new Date().getTime();
  var t = deadline - now;
  var hours = Math.floor((t%(1000 * 60 * 60 * 24))/(1000 * 60 * 60)) +".";
  var minutes = Math.floor((t % (1000 * 60 * 60)) / (1000 * 60)) +".";
  var seconds = Math.floor((t % (1000 * 60)) / 1000);
  document.getElementById("hour").innerHTML =hours;
  document.getElementById("minute").innerHTML = minutes;
  document.getElementById("second").innerHTML =seconds;
  if (t < 0) {
          clearInterval(window.x);
          document.getElementById("hour").innerHTML ='0';
          document.getElementById("minute").innerHTML ='0' ;
          document.getElementById("second").innerHTML = '0'; }
          update();
  }, 1000);

}

标签: javascript

解决方案


编辑:然后我想在您的程序中某处存在一些阻塞代码,导致在一个间隔结束和下一个开始之间的某处出现延迟。尝试使用 setInterval 方法并将任何可能暂停执行的代码移出间隔函数。

原文:尝试重构代码以使用 setInterval(function, milliseconds) 而不是 setTimeout(function, milliseconds)。根据我的经验,最好使用内置逻辑而不是自己编写。


推荐阅读