2011-06-10 27 views
0

我有這個劇本,我的CSS垂直菜單:如何藏身延遲添加到完整的CSS下拉垂直菜單

//Nested Side Bar Menu (Mar 20th, 09) 
//By Dynamic Drive: http://www.dynamicdrive.com/style/ 

var menuids=["sidebarmenu1"] //Enter id(s) of each Side Bar Menu's main UL, separated by commas 

function initsidebarmenu(){ 
for (var i=0; i<menuids.length; i++){ 
    var ultags=document.getElementById(menuids[i]).getElementsByTagName("ul") 
    for (var t=0; t<ultags.length; t++){ 
    ultags[t].parentNode.getElementsByTagName("a")[0].className+=" subfolderstyle" 
    if (ultags[t].parentNode.parentNode.id==menuids[i]) //if this is a first level submenu 
    ultags[t].style.left=ultags[t].parentNode.offsetWidth+"px" //dynamically position first level submenus to be width of main menu item 
    else //else if this is a sub level submenu (ul) 
    ultags[t].style.left=ultags[t-1].getElementsByTagName("a")[0].offsetWidth+"px" //position menu to the right of menu item that activated it 
    ultags[t].parentNode.onmouseover=function(){ 
    this.getElementsByTagName("ul")[0].style.display="block" 
    } 
    ultags[t].parentNode.onmouseout=function(){ 
    this.getElementsByTagName("ul")[0].style.display="none" 
    } 
    } 
    for (var t=ultags.length-1; t>-1; t--){ //loop through all sub menus again, and use "display:none" to hide menus (to prevent possible page scrollbars 
    ultags[t].style.visibility="visible" 
    ultags[t].style.display="none" 
    } 
    } 
} 

if (window.addEventListener) 
window.addEventListener("load", initsidebarmenu, false) 
else if (window.attachEvent) 
window.attachEvent("onload", initsidebarmenu) 

我在哪裏可以使用超時()從隱藏馬上去菜單延遲?

回答

2

腳本:

//Nested Side Bar Menu (Mar 20th, 09) 
//By Dynamic Drive: http://www.dynamicdrive.com/style/ 

var menuids=["sidebarmenu1"] //Enter id(s) of each Side Bar Menu's main UL, separated by commas 
var defaultDelay = 0; //ms 

function initsidebarmenu(){ 
    for (var i=0; i<menuids.length; i++){ 
     var ultags=document.getElementById(menuids[i]).getElementsByTagName("ul"); 
     for (var t=0; t<ultags.length; t++){ 
      ultags[t].parentNode.getElementsByTagName("a")[0].className+=" subfolderstyle"; 
      if (ultags[t].parentNode.parentNode.id==menuids[i]){ //if this is a first level submenu 
       ultags[t].style.left=ultags[t].parentNode.offsetWidth+"px"; //dynamically position first level submenus to be width of main menu item 
      } else{ //else if this is a sub level submenu (ul) 
       ultags[t].style.left=ultags[t-1].getElementsByTagName("a")[0].offsetWidth+"px"; //position menu to the right of menu item that activated it 
      } 
      ultags[t].parentNode.onmouseover=function(){ 
       var elem = this.getElementsByTagName("ul")[0]; 
       if (elem){ 
        if (elem.timer){ 
         clearTimeout(elem.timer); 
        } 
        elem.timer=0; 
        elem.style.display="block"; 
       } 
      } 
      ultags[t].parentNode.onmouseout=function(){ 
       var elem = this.getElementsByTagName("ul")[0]; 
       if (elem){ 
        var delay = defaultDelay; 
        if (elem.parentNode && elem.parentNode.parentNode && elem.parentNode.parentNode.className){ 
         var match = /submenu-delay-([0-9]*)/i.exec(elem.parentNode.parentNode.className); 
         delay = (match && (match.length > 1)) ? match[1] : defaultDelay; 
        } 
        elem.timer=setTimeout(function(){ 
         elem.style.display="none"; 
        }, delay); 
       } 
      }; 
     } 
     for (var t=ultags.length-1; t>-1; t--){ //loop through all sub menus again, and use "display:none" to hide menus (to prevent possible page scrollbars 
     ultags[t].style.visibility="visible" 
     ultags[t].style.display="none" 
     } 
    } 
} 

    if (window.addEventListener) 
    window.addEventListener("load", initsidebarmenu, false) 
    else if (window.attachEvent) 
    window.attachEvent("onload", initsidebarmenu) 

HTML:

<div class="sidebarmenu"> 
<ul id="sidebarmenu1" class='submenu-delay-1000'> 
<li><a href="#">Item 1</a></li> 
<li><a href="#">Item 2</a></li> 
<li><a href="#">Folder 1</a> 
    <ul> 
    <li><a href="#">Sub Item 1.1</a></li> 
    <li><a href="#">Sub Item 1.2</a></li> 
    </ul> 
</li> 
<li><a href="#">Item 3</a></li> 

<li><a href="#">Folder 2</a> 
    <ul> 
    <li><a href="#">Sub Item 2.1</a></li> 
    <li><a href="#">Folder 2.1</a> 
    <ul> 
    <li><a href="#">Folder 2.1.1</a> 
     <ul class='submenu-delay-5000'> 
     <li><a href="#">Sub Item 2.1.1.1</a></li> 
     <li><a href="#">Sub Item 2.1.1.2</a></li> 
     <li><a href="#">Folder 2.1.1.3</a>] 
      <ul > 
      <li><a href="#">Sub Item 2.1.1.3.1</a></li> 
      <li><a href="#">Sub Item 2.1.1.3.2</a></li> 
      </ul> 
     </li> 
     </ul> 
    </li> 
    <li><a href="#">Sub Item 2.1.2</a></li> 
    <li><a href="#">Sub Item 2.1.3</a></li> 
    <li><a href="#">Sub Item 2.1.4</a></li> 
    </ul> 
    </li> 
</ul> 
</li> 
<li><a href="#">Item 4</a></li> 
</ul> 
</div> 
+0

謝謝您的回答,但這段代碼正在保持開放,不給予延遲前的所有時間的菜單關閉它。如果我將鼠標移出菜單,它不會關閉。 您有任何其他想法嗎? 非常感謝您的支持。 – 2011-06-13 14:39:06

+0

無法重現您所描述的效果,將代碼更改爲「更安全」。我在Windows 7上測試過Firefox 3.6.17,Chrome 13.0.782.14和IE 9.0.8112.16421(Quirks模式,IE7,IE8,IE9)。在哪些瀏覽器中測試?順便說一句,改變了一些編碼風格(抱歉)。 – Prusse 2011-06-13 17:27:09

+0

我使用的是Firefox 4.01,Chrome 12.0.742.91,IE8,IE9和Safari 5.0.5。我嘗試了你發送的新代碼並且它可以工作,唯一的問題是當你移動到第三級菜單時,它會在第一個打開的菜單隱藏時重疊幾秒鐘。是否有可能只爲二級菜單控制隱藏?第三層就立即隱藏起來?或者別的什麼,我只是在想。但無論如何,非常感謝你對這位男士的幫助。 – 2011-06-14 22:33:48