jQuery:如何使用queue()中的函数执行clearInterval?

时间:2013-12-06 15:46:29

标签: jquery queue prototype extend clearinterval

我有一些代码添加到使用计时器的jQuery原型中。代码通过 queue()执行得很好,但是我认为这两个定时器都没有清除。我的眨眼功能特别引人注目。 DOM元素一直闪烁。

我知道这样的代码是有效的,因为在我实现队列()之前它在6“闪烁”之后停止了。代码如下:

(function($) {
    $.fn.extend({
        blink: function(times,delay,name) {
            times = times || 1;
            delay = delay || 1000;
            name = name || "fx";
            return this.queue(name, function() {
                var self = this;
                var counter = 0;
                var timer = setInterval( function() {
                    if($(self).hasClass("hidden")) {
                        $(self).removeClass("hidden");
                        counter++;
                    } else {
                        $(self).addClass("hidden");
                    }
                    if(counter == times) {
                        clearInterval("timer");
                        $(self).dequeue();
                    }
                }, delay);
            });
        },
        pause: function(delay,name) {
            delay = delay || 1000;
            name = name || "fx";
            return this.queue(name, function() {
                var self = this;
                var timer = setTimeout(function() {
                    clearTimeout("timer");
                    $(self).dequeue();
                }, delay);
            });
        }
    });
}(jQuery));

函数执行如下,其中$(this)是有问题的对象/元素:

$(this).pause(1000).blink(6,175);

我提到的问题是功能按顺序运行,但定时器似乎永远不会清楚。有什么想法吗?

修改

以为我会在上面添加另一个问题。你看,我还是一个新手并且已经阅读了很多关于函数返回但是从未真正理解上面发生的事情返回this.queue(...)

当我用'pause(1000)'调用函数时究竟返回了什么?或者'暂停(1000)'以某种方式替换链中的返回对象?再次感谢!

0 个答案:

没有答案