清除jQuery插件中的间隔

时间:2015-05-13 09:24:57

标签: javascript jquery

我有一个非常简单的插件,可以为一段文字添加点,即

Loading.
Loading..
Loading...
Loading.

这是我的代码(http://codepen.io/EightArmsHQ/pen/waGzJb?editors=001):

$.fn.dotdotdots = function(options) {

  var settings = $.extend({
    speed: 300,
    dot_max: 3,
    reset: 0,
    string: '.'
  }, options );

  var default_text = this.text();
  var target = this;
  var dot_count = 0;

  setInterval(function(){

    var dots = '';

    for(var i = settings.reset; i < dot_count; i ++){
      dots += settings.string;
    }

    dot_count ++;
    if(dot_count > settings.dot_max){
      dot_count = settings.reset;
    }

    target.text(default_text + dots);
  }, settings.speed);

  return this;

};

$("#target").dotdotdots({'speed':400});

问题是,过了一段时间后,我想停止插件中的setInterval。我的直接想法是尝试在函数内部:

this.intId = setInterval(function(){

然后我可以使用类似的东西:

clearInterval($("#target").intId);

外部阻止插件执行其操作。但是,这并没有成功......有人能指出我正确的方向吗?

说实话,我想知道是否需要让插件更复杂,并以某种方式使用.start().stop()函数。

2 个答案:

答案 0 :(得分:4)

您需要访问setInterval变量,因此将间隔分配给全局(内部插件)变量:

$.fn.dotdotdots.Interval = setInterval(...)

然后你可以清除它:

clearInterval($.fn.dotdotdots.Interval)

答案 1 :(得分:0)

只有在满足条件时才需要使用setInterval和clearInterval创建变量。

一个例子:

var myInterval = setInterval(function(){

    var dots = '';

    for(var i = settings.reset; i < dot_count; i ++){
      dots += settings.string;
    }

    dot_count ++;
    if(dot_count > settings.dot_max){
      dot_count = settings.reset;
     
    }

    target.text(default_text + dots);
  }, settings.speed);

if(true) clearInterval(myInterval);