【问题标题】:Clearing multiple instances of variables created with setInterval清除使用 setInterval 创建的变量的多个实例
【发布时间】:2014-05-02 02:24:16
【问题描述】:

问题描述 (Fiddle):

我正在尝试通过类上的 mousedown 事件清除使用 setInterval 创建的变量的多个实例。在提供的示例中,如果您只单击一次黑框,小猫会闪烁两次,然后变量将被取消设置。

如果您在 5 秒内多次单击黑框,则会出现多个小猫实例,并且永远不会删除后续单击。为什么清除 red 不清除变量的所有实例?

我知道我可以通过设置一个标志来“锁定”点击,但有没有更优雅的方法来解决这个问题,也许利用this 或其他一些奇特的结构?如果不是red,这些后续变量又是什么?

代码:

var red;

$('.container').mousedown(function() {
    red = window.setInterval(function() {
        $('<img src="http://placekitten.com/g/25/25" />').appendTo('body').animate({
            'opacity': 0
        }, 1000, function(){ $(this).remove(); });
    }, 2000);

    setTimeout(function() {
        window.clearInterval(red);
    }, 5000);

});

【问题讨论】:

  • setInterval 每次都会给你一个不同的间隔“标识符”,因为你每次都覆盖全局变量red ,您只有对存储的最后一个间隔的引用,因此您只能清除它。请改用局部变量。

标签: javascript jquery html variables setinterval


【解决方案1】:

“为什么清除红色不会擦除变量的所有实例?”。

事实上,确实如此。您的代码非常清晰,您只是在 5 秒后清除间隔。因此,如果您单击该元素 20 次,您将创建 20 个间隔。如果您只希望它触发一次,则需要在设置新的间隔之前清除间隔。

例如,把这个放在你设置间隔之前:

window.clearInterval(red);

jsFiddle:http://jsfiddle.net/ngDTV/9/

【讨论】:

  • Aaaaand... 我应该被否决。不过谢谢!
  • @daveycroqet 不,你不应该被否决,这是一种常见的设计模式,你可能会再次使用,但直到你看到它应该是如何编码的,可能很难弄清楚。
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多