禁用setInterval - 不确定这是否是clearInterval的替代方法

时间:2015-06-25 20:52:35

标签: javascript setinterval clearinterval

所以我知道您可以将setInterval分配给变量,然后将该变量传递给clearInterval以禁用定时器。

我在想:

假设我有一个在页面启动时为null的全局变量。当调用特定函数时,将为全局变量分配setInterval(fname,seconds)。当我不希望这个间隔再次运行时,我将全局变量设置为null。

对于我专门测试的内容(一系列图像一个接一个地渲染),它似乎有效,但我想知道我是否犯了一些偷偷摸摸的错误。

以下是我的代码概述:

    <?xml version="1.0" encoding="utf-8"?>
    <Button xmlns:android="http://schemas.android.com/apk/res/android"
       style="@style/SportsList"
       android:id="@+id/sport_item"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:paddingTop="15dp"
       android:paddingBottom="15dp"
       android:layout_gravity="center"/>

3 个答案:

答案 0 :(得分:0)

  

当我不希望这个间隔再次运行时,我将全局变量设置为null。

不,这不起作用。您可以简单地试用您的代码。它将继续执行您的回调,即使您已经丢弃了可能用于停止间隔的标识符。

只需致电clearInterval

MyStuff.controls.stop = function () {
    clearInterval(MyStuff.controls.animation_timer);
    MyStuff.controls.animation_timer = null;
}

答案 1 :(得分:0)

你的例子有用吗?当然,我不明白为什么不。

这是好形式吗?可能不是。你仍然会定期调用MyStuff.controls.animate,但它什么都不做(假设它正在观察并且有条件地对全局变量起作用)。那是浪费在那里的处理。这是an example的样子。检查控制台的输出。您可以看到该函数仍然运行,它只是表现不同。

我无法想出不使用setInterval / clearInterval的充分理由。

如果您需要确保只运行一个实例,只需将全局变量视为互斥锁即可。例如:

  • 如果要启动间隔,请检查全局变量。如果为null,则运行setInterval并将结果存储在全局变量中。如果它是非空的,则间隔已在运行,因此调用setInterval
  • 如果要停止间隔,请在全局变量上使用clearInterval,然后将其设置为null。

答案 2 :(得分:0)

我犯了一个错误。我打电话给clearInterval我只是因为某种原因没看到它 - 我提出的例子不起作用。大家好!