我如何才能更好地组织代码以防止不良行为?

时间:2019-02-02 17:12:53

标签: javascript algorithm debugging

到目前为止,我已经为计时器编写了一个脚本来倒计时到特定的一天。问题在于,刷新浏览器的那一刻,它需要1秒钟才能显示出来,而不是立即显示。

我确实想出了一种使它立即显示的方法,但是我不得不通过将其直接放在countDownDate, now, timeDifference, oneDay, days, hours, minutes, seconds的顶部来重复使用document.getElementById("timer").innerHTML = ...;timer()的代码块效率低下。

在下面的尝试中,当浏览器刷新时,倒计时会出现大约一秒钟,但我希望它能够立即显示。我的目标是创建可重用的代码。

我在做什么错,我该如何解决?

这是html:

<h1 id="timer"></h1>

这是js:

function conversion() {
    var countDownDate = new Date("June 1, 2019 24:00:00");

    var now = new Date().getTime(); 
    var timeDifference = countDownDate - now; 
    var oneDay         = 1000 * 60 * 60 * 24; 

    var days = Math.floor(timeDifference / (oneDay));
    var hours = Math.floor((timeDifference % (oneDay)) / (1000 * 60 * 60));
    var minutes = Math.floor((timeDifference % (1000 * 60 * 60)) / (1000 * 60));
    var seconds = Math.floor((timeDifference % (1000 * 60)) / 1000);

    document.getElementById("timer").innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";
}

function timerCountdown() {
    var timer = setInterval(function() {
        conversion();
        if(timeDifference < 0) { 
            clearInterval(timer); 
            document.getElementById("timer").innerHTML = "Timer's over."; 
        } 

    }, 1000); 
}

timerCountdown();

2 个答案:

答案 0 :(得分:1)

setInterval回调函数放入变量中,并使用该函数调用setInterval,并在页面加载时立即调用

function timerCountdown() {
  var timer = setInterval(intervalCb, 1000); 
  function intervalCb() {
    conversion();
    if(timeDifference < 0) { 
      clearInterval(timer); 
      document.getElementById("timer").innerHTML = "Timer's over."; 
    }
  }
  intervalCb();
}
timerCountdown();

答案 1 :(得分:0)

立即拨打float xIn = -0.0004F; float xOut = 0; MemoryMappedFile memoryMappedFile = CreateMMF(); using (MemoryMappedViewAccessor accessor = memoryMappedFile.CreateViewAccessor(0, 8)) { accessor.Write(0, xIn); } using (MemoryMappedViewAccessor accessor = memoryMappedFile.CreateViewAccessor(0, 8)) { accessor.Read(0, out xOut); }