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

需求就是 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);
阅读 1.7k
1 个回答

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

clearTimeout(timeout)
timeout = setTimeout(fixed, nextTime);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题