如何停止/覆盖 Jquery TimeOut 函数?

Posted

技术标签:

【中文标题】如何停止/覆盖 Jquery TimeOut 函数?【英文标题】:How to stop/override a Jquery TimeOut function? 【发布时间】:2011-02-04 10:30:11 【问题描述】:

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

例如:

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

通知运行良好,除非用户快速连续执行两个或多个操作,在这种情况下,TimeOut 函数会混淆自身,并且第二条消息似乎出现在前 3000 毫秒内。

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

谢谢。

【问题讨论】:

【参考方案1】:

您可以使用.stop()

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

【讨论】:

【参考方案2】:

首先,存储setTimeout 函数的返回值:

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

然后,当您准备好终止超时时...您只需调用 clearTimeout 并使用上一次调用 setTimeout 的存储值。

// Then clearn the timeout
clearTimeout(timeout);

【讨论】:

清除后会执行超时功能吗?【参考方案3】:

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

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

然后当你想清理动画队列时,你可以这样做:

$("#mini").stop(true);

【讨论】:

【参考方案4】:

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

var timeout = setTimeout(function()

/* YOUR FUNCTION */

, 500, function()
   clearTimeout(timeout);
);

【讨论】:

以上是关于如何停止/覆盖 Jquery TimeOut 函数?的主要内容,如果未能解决你的问题,请参考以下文章

在AngularJS中停止setTimeout函数(提示:使用$ timeout)

如何覆盖 jQuery 函数或阻止它执行

如何在响应式网站上停止 jQuery 和 jQuery Mobile 文件之间的冲突?

如何停止将函数保存在jquery中

如何在 jQuery 中停止 .each .animate 循环函数

使用 jquery/javascript 停止带有动画的函数