我正在尝试做一个简单的 setTimeout,让 div 标签在 2 秒后不可见。
setTimeout 函数使div 不可见但不规律,有时立即出现,有时1 秒后出现,等等。
这是我的代码:
function beginTimeOut(){
t = setTimeout(function(){hideSubMenu()},2000);
}
function hideSubMenu(){
var elem;
elem = document.getElementById("ul_navlist1");
elem.style.visibility="hidden";
clearTimeout(t);
}
顺便说一下,t 是一个全局变量。我也试过这个:t = setTimeout("hideSubMenu()",2000);
但结果不规则。
来自 OP 的更新:
这是包含我的菜单和子菜单的 div。我对其进行了编辑,使其在此处更具可读性。
right_rect 是包含菜单和子菜单的 div。在这个 div 中,我调用 onmouseout 来隐藏子菜单。
<div class="right_rect" onmouseout="beginTimeOut();">
<div class="menu2" >
<ul >
<li onclick="hideOrShow();"><a href="#">item1</a></li>
</ul>
</div>
<div id="ul_navlist1">
<ul >
<li><a href="#">sub_item1</a></li>
</ul>
</div>
</div>
这是我用来执行隐藏和显示过程的 javascript 部分。
function hideOrShow(){
var hOrV;
var elem;
var styleType = "visibility";
elem = document.getElementById("ul_navlist1");
hOrV = getStyle(elem, styleType);
if(hOrV =="hidden"){
//alert();
elem.style.visibility="visible";
}else{
elem.style.visibility="hidden";
}
}
function beginTimeOut(){
setTimeout(function(){document.getElementById("ul_navlist1").style.visibility="hidden";}, 2000);
}
function getStyle(oElm, strCssRule){
var strValue = "";
if(document.defaultView && document.defaultView.getComputedStyle){
strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
}
else if(oElm.currentStyle){
strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
return p1.toUpperCase();
});
strValue = oElm.currentStyle[strCssRule];
}
return strValue;
}
getStyle 函数不是我的代码。
最佳答案
你可以这样做:
function beginTimeOut(){
setTimeout(hideSubMenu,2000);
}
function hideSubMenu(){
document.getElementById("ul_navlist1").style.visibility="hidden";
}
setTimeout()
只运行一次,除非你想在它执行之前停止它,否则不需要清除它。从你的问题中我不确定你在哪里打电话 beginTimeOut()
, 但它开始的时间可能会有所不同。我会在文档中执行此操作 load
某种事件或在你的 <body>
结束时,取决于您还运行了什么。
作为旁注,您可以将其放在单个语句中,如下所示:
setTimeout(function() {
document.getElementById("ul_navlist1").style.visibility="hidden";
}, 2000);
关于javascript - 如何正确调用clearTimeout? (超时 ID 丢失?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2733800/