如何停止/覆盖 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 Mobile 文件之间的冲突?