2012-02-16 54 views
-4

我正在使用JavaScript来设置我的鼠标悬停在左侧导航。但问题是,超时比预期的要快。如何在鼠标悬停时更长时间?mouseover超时太快

stuHover = function() { 
    var cssRule; 
    var newSelector; 
    for (var i = 0; i < document.styleSheets.length; i++) { 
     for (var x = 0; x < document.styleSheets[i].rules.length; x++) { 
      cssRule = document.styleSheets[i].rules[x]; 
      if (cssRule.selectorText.indexOf("LI:hover") != -1) { 
       newSelector = cssRule.selectorText.replace(/LI:hover/gi, "LI.iehover"); 
      document.styleSheets[i].addRule(newSelector, cssRule.style.cssText); 
      } 
     } 
    } 
    var getElm = document.getElementById("nav").getElementsByTagName("LI"); 
    for (var i = 0; i < getElm.length; i++) { 
     getElm[i].onmouseover = function() { 
      this.className += " iehover"; 
     } 
     getElm[i].onmouseout = function() { 
      this.className = this.className.replace(new RegExp("iehover\\\b"), "") 
      } 
     } 
    } 
    if (window.attachEvent) window.attachEvent("onload", stuHover); 
+0

你认为'\ 5000'做什么?你的问题代码中根本没有计时器代码! – ThiefMaster 2012-02-16 01:07:01

+0

ohh对不起。我改变了代码。我会编辑它,但你可以改变代码,以使其在鼠标悬停时长久持续吗? – ace 2012-02-16 01:09:19

+0

我认为您需要了解一些基础知识 - 查看您更改的代码,但您缺少有关JavaScript语言的基本知识,这将使您很难使用它。 – ThiefMaster 2012-02-16 01:11:06

回答

0

你想是这样的:

getElm[i].onmouseout = function() { 
    var t = this; 
    setTimeout(function() { 
     t.className = t.className.replace(" iehover",""); 
    },5000); // 5 seconds 
}; 

虽然说真的,如果我不得不等待5秒钟的东西消失,如果我不小心移到触发区域,我很恼火。改为尝试250(0.25秒)。

+0

另请注意,如果您将鼠标移回触发区并在5秒(或250ms)之前将鼠标留在那里,超时仍将继续运行并删除该类。 – nnnnnn 2012-02-16 01:14:43

+0

这不处理再次悬停时清除超时;这将是他的下一篇文章,如果你给他的代码,他认为他可以复制/粘贴和魔术般的工作。 – Chad 2012-02-16 01:15:27

+0

我们这样做(在我们纯粹的CSS菜单上,通过javascript增强以延迟即时CSS关闭),但我们也可以在菜单外单击任何点击以立即关闭它。这样,如果您不小心启动菜单,您可以点击页面背景,因此您无需等待250毫秒。 – 2012-02-16 01:17:47