javascript - 如何为 Full CSS Dropdown Vertical Menu 添加隐藏延迟

标签 javascript css delay settimeout drop-down-menu

我的 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)

我在哪里可以使用 timeout() 来延迟菜单立即隐藏?

最佳答案

脚本:

//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>

关于javascript - 如何为 Full CSS Dropdown Vertical Menu 添加隐藏延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6312227/

相关文章:

vba - VB.net 中的延迟

javascript - 从网页下载后如何更新 javascript 变量

javascript - 动态地将类添加到数组中来自 *ngFor 的内容

html - 页脚文本在 IE10 中突出显示蓝色?

wordpress - 如何延迟我的网站的下拉菜单

javascript - 如何编写一个需要 X 秒的函数?

javascript - HTML Canvas : difference between width/height attribute and width/height style

javascript - Jquery 和 javascript 元素显示更改似乎禁用了该元素的媒体查询

php - 色样图像未呈现

html - 如何将 Bing map 菜单移动到屏幕右侧