【问题标题】:Unique JavaScript/DHTML Menu: Onmouseover/onmouseout scripting logic challenges独特的 JavaScript/DHTML 菜单:Onmouseover/onmouseout 脚本逻辑挑战
【发布时间】:2012-06-10 01:50:56
【问题描述】:

我正在尝试创建一个使用以下 HTML 的 JavaScript 菜单:

<table id="mainMenu">
  <tr>
    <td id="mainMenu1">Item 1</td>
    <td id="mainMenu2">Item 2</td>
    <td id="mainMenu3">Item 3</td>
  </tr>
</table>

<table id="subMenuA" style='hidden';>
  <tr>
    <td>Subitem A1</td>
    <td>Subitem A2</td>
    <td>Subitem A3</td>  
  </tr>
</table>
<table id="subMenuB" style='hidden';>
  <tr>
    <td>Subitem B1</td>
    <td>Subitem B2</td>
    ...

当#mainMenu1 onmouseover 时,我想要#subMenuA.style='visible'。
当#mainMenu1 onmouseout 时,我想要#subheaderA.style='hidden'。
当#subMenuA onmouseout 时,我想要#subheaderA.style='hidden'。

请注意,传统的下拉脚本不起作用,因为这两个菜单是两个独立的元素,并且它们之间的距离很小。因此,有必要在这两个要素之间“架起桥梁”。这个怎么办??

谁能推荐一个基本的 JavaScript 代码来让它工作?即使只是逻辑/想法也会很棒。我真的很感激!

【问题讨论】:

    标签: javascript drop-down-menu dom-events menubar dhtml


    【解决方案1】:

    更新答案:http://jsfiddle.net/imsky/zcwJt/4/

    var $ = function(el) {
        return document.getElementById(el)
    };
    
    var menu_timer;
    
    $("item1").onmouseover = function() {
        window.clearTimeout(menu_timer);
        $("menu1").style.display = "block";
    }
    
    $("menu1").onmouseover = function() {
        window.clearTimeout(menu_timer);
    }
    
    $("menu1").onmouseout = function(e) {
        window.clearTimeout(menu_timer);
        if (!parent(e.relatedTarget, this)) {
            var menu = this;
            menu_timer = window.setTimeout(function() {
                menu.style.display = "none";
            }, 1000)
        }
    }
    
    var parent = function(el, p) {
        if (!el) {
            return false;
        }
        if (el !== p) {
            while (el.parentNode) {
                el = el.parentNode;
                if (el == p) {
                    return true;
                }
            }
        }
        else {
            return true;
        }
        return false;
    }
    

    【讨论】:

    • 这是原理思想,但是在菜单关闭之前我无法将鼠标从 item1 移到 menu1。布局是关键:) 我的问题是如何在两个元素之间“弥合差距”。
    • 实际上你能把它交给 JS 本身吗?我正在使用 Google 小工具进行开发,但 jQuery 似乎无法正常工作。
    • 代码完全是基于DOM的JS,没有jQuery。如果存在变量问题,您可以将var $$ 的所有实例设置为不冲突的值,例如getID
    • 我明白了。但我真的需要一个对 mainMenu[1-3] 有超时影响的代码。