【发布时间】:2018-01-22 13:51:23
【问题描述】:
首先:我进行了搜索,所有关于 clearTimeout 不起作用的问题都是关于变量范围的问题,而不是我的情况。
我需要在 X 秒后自动隐藏标题而不进行交互,所以我创建了两个函数,startMenuTimeout 和 clearMenuTimeout(),我的这部分代码如下所示:
var menuTimeout = null;
function startMenuTimeout(){
menuTimeout = setTimeout(function(){
$('[auto-header]').removeClass('-visible');
}, 2000);
}
function clearMenuTimeout(){
clearTimeout(menuTimeout);
}
当用户向上滚动时,我使标题可见并开始超时,然后在mouseenter 上清除超时。
问题是,有时它不会清除超时,如果你上下滚动几次,在 2 秒超时后,菜单会上升。
我在codepen上重现了问题,点击here访问。
【问题讨论】:
-
您可能开始了很多超时。当您使用上述代码创建第二个时,第一个无法停止,因为您丢失了 id。
-
哦,我明白了,在这种情况下,有没有办法用相同的 ID 创建新的超时,覆盖最后一个?
-
@BrunoVaz 这就是超时返回的内容。
-
是的,每次调用
setTimeout都会返回一个新 ID。 -
@BrunoVaz JSRun。没有窗口或文档对象,但由于它有一个控制台,因此非常适合快速测试代码。我在 Android 上。
标签: jquery cleartimeout