javascript - 在 JavaScript 中使用 window.setInterval 方法的基于 Web 的计时器应用程序在移动浏览器(Chrome、Firefox 等)上无法正常工作

标签 javascript mobile timer countdowntimer mobile-chrome

在 JavaScript 中使用 window.setInterval 方法的基于 Web 的计时器应用程序在移动浏览器中无法正常工作。这背后的原因是,在一定时间后,由于用户不活动,显示屏会熄灭,并且应用程序会移至后台以节省电量。因此window.setInterval不会周期性触发,整个计算就折腾了。

但是,我注意到尽管有这些限制,某些基于 Web 的计时器在移动浏览器中仍能正常工作。例如。 Google Timer .尽管存在上述限制,Google Timer 即使在离线 模式下也能正常工作。这些应用程序使用了哪些技术,因此它们也可以在移动浏览器上运行。

最佳答案

您需要在计算中使用系统时间。这样,当您的页面再次出现时,它会根据当前时间显示状态,而不是依赖过去的步骤。

btn.addEventListener('click', () => {
  btn.disabled = true;

  const start = new Date().getTime();
  const end = input.value * 60 * 1000 + start;

  let timer = setInterval(update, 1000);

  update();

  function update() {
    const current = new Date().getTime();
    let remaining = (end - current) / 1000;
    
    if (remaining <= 0) {
      clearInterval(timer);
      btn.disabled = false;
      output.textContent = 'Done!'
    } else {
      output.textContent = `${Math.floor(remaining / 60)}m ${Math.floor(remaining%60)}s`;
    }
  }
  
});
<button id="btn">Countdown</button>
<input id="input" type="number" value="2" min=1 max=59 size=5 />mins
<p id="output">0m 0s</p>

关于javascript - 在 JavaScript 中使用 window.setInterval 方法的基于 Web 的计时器应用程序在移动浏览器(Chrome、Firefox 等)上无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72058563/

相关文章:

jquery - 如何在jquery中使用不同的值多次调用函数

javascript - defaultValue 在 react DatePicker 中不起作用

c++ - 数字小键盘到移动小键盘模拟器。

html - 针对移动设备和大屏幕尺寸的 CSS 媒体查询

javascript - 在移动应用程序的 Javascript 中动态加载图像而不阻塞 UI?

c++ - 仅使用标准库实现等待计时器

javascript - 在新窗口中打开存储在javascript变量中的html文件

javascript - 谁可以向 grunt-wiredep 生成的 URL 附加前缀和后缀?

javascript - iscroll 问题与二维(水平+垂直)滚动、可滚动是否相关?

android - 以较长的间隔时间轮询数据库,哪种方法最好、最有效?