Jquery .delay()。fadeOut取消/清除队列..有可能吗?怎么样?

时间:2010-10-05 13:14:37

标签: javascript jquery delay

我需要一些帮助.. 是否可以取消链接延迟?

Mn.Base.TopBox.show = function(timedur){
    $('#element').fadeIn().delay(timedur).fadeOut();
}


Mn.Base.TopBox.cancelFadeout = function(){

}

我读到了关于排队并尝试了一些不同的方法,但我没有成功......

    $('#element').stop();

    $('#element').queue('fx', []);

提前致谢,

佩德罗

1 个答案:

答案 0 :(得分:9)

事实并非如此,.delay()与其他任何东西都不能很好地发挥作用,因为计时器一直在滴答作响,当它出现时执行.dequeue() ...无论你是否清除了队列并添加了一个全新的。

如果您打算取消,最好直接使用setTimeout(),例如:

Mn.Base.TopBox.show = function(timedur){
  $('#element').fadeIn(function() {
    var elem = $(this);
    $.data(this, 'timer', setTimeout(function() { elem.fadeOut(); }, timedur));
  });
}

Mn.Base.TopBox.cancelFadeout = function(){
  clearTimeout($('#element').stop().data('timer'));
}

这样做是设置计时器并使用$.data()存储它,当设置动画时,我们都会调用.stop()来停止正在进行的任何操作,停止那个计时器。

如果您快速解决这个问题,那么潜力仍然存在问题,在这种情况下,您需要切换到存储一系列延迟,并清除它们。