2012-02-16 69 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