代码之家  ›  专栏  ›  技术社区  ›  Tom

如何停止/重写jquery超时函数?

  •  27
  • Tom  · 技术社区  · 14 年前

    我有一个小jquery片段,它在屏幕顶部显示通知消息以响应页面上的用户操作。通知通常在ajax操作之后显示,其中包含动态内容。

    例如:

    $("#mini-txt").html("Thank you!");
    $("#mini").fadeIn("fast");
    setTimeout(function() {$("#mini").animate({height: "hide", opacity: "hide"}, "medium");}, 3000);
    

    通知工作得很好,除非用户连续快速地执行两个或多个操作,在这种情况下,超时功能会使自己混淆,第二条消息似乎出现在前3000毫秒内。

    如果执行新操作,是否有方法“终止”以前的通知。我对操作/选择器没有问题,只有超时功能….要么阻止它,要么以某种方式覆盖它。或者也许有更好的选择让信息在屏幕上停留几秒钟然后消失?

    谢谢您。

    4 回复  |  直到 7 年前
        1
  •  58
  •   Justin Niessner    14 年前

    首先,存储 setTimeout 功能:

    // Set the timeout
    var timeout = setTimeout(function()
        {
            // Your function here
        }, 2000);
    

    然后,当你准备结束超时时…你只要打电话 clearTimeout 使用上次调用中存储的值 设置超时 .

    // Then clearn the timeout
    clearTimeout(timeout);
    
        2
  •  6
  •   rahul    14 年前

    你可以使用 .stop()

    停止当前正在运行的动画 在匹配的元素上。

        3
  •  6
  •   PetersenDidIt    14 年前

    jquery 1.4有一个内置的方法来处理动画的延迟,您可以这样做:

    $("#mini-txt").html("Thank you!");
    $("#mini").fadeIn("fast").delay(3000).animate({height: "hide", opacity: "hide"}, "medium");
    

    稍后,当您要清理动画队列时,可以执行以下操作:

    $("#mini").stop(true);
    
        4
  •  0
  •   Tadeusz Majkowski    7 年前

    这将清除延迟500毫秒的函数运行后的超时

    var timeout = setTimeout(function(){
    
    /* YOUR FUNCTION */
    
    }, 500, function(){
       clearTimeout(timeout);
    });