求救, 这样的定时器该怎么清除?

发布于 2022-09-13 00:32:38 字数 961 浏览 19 评论 0

需求就是 xxx 半秒显示 半秒隐藏一次, 因为setinterval有延迟不准, 所以就用了这个方法。

这个定时器是写在tab页里的, 每次切换tab都会添加一次这个定时器, 导致速度越来越快。

不能去判断该定时器是否存在, 然后进行是否添加定时器操作。
因为要不停的调接口, 我就想在每次在添加这个定时器前, 把这个定时器删了, 该如何写?

var timeout ;
function fixed() {
  let startTime = new Date().getTime();
  let count = 0;
  count++;
  let offset = new Date().getTime() - (startTime + count * 500);
  let nextTime = 500 - offset;
  if (nextTime < 0) nextTime = 0;
  setTimeout(fixed, nextTime);
  // 这里是显隐操作代码
  if (!gisLayerLine10fd.getVisible()) {
    gisLayerLine10fd.setVisible(true);
  } else {
    gisLayerLine10fd.setVisible(false);
  }
  if (!gisLayerLine110fd.getVisible()) {
    gisLayerLine110fd.setVisible(true);
  } else {
    gisLayerLine110fd.setVisible(false);
  }
}

我在调用fixed的地方, clearTimeout和赋null都不能清掉这个定时器。

if (timeout) {
    clearTimeout(timeout);
    timeout = null;
  }
timeout = setTimeout(fixed, 4000);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

隱形的亼 2022-09-20 00:32:38

你需要清除的是fixed函数内部的定时器,而不是外部的定时器

clearTimeout(timeout)
timeout = setTimeout(fixed, nextTime);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文