JavaScript 菜单鼠标退出问题

JavaScript menu onmouseout issue

本文关键字:出问题 退出 鼠标 菜单 JavaScript      更新时间:2023-09-26

我正在尝试创建一个JavaScript(最好不是jQuery btw)网站菜单,当每个菜单项悬停时,它会降低子链接的下拉菜单。我几乎已经完全功能齐全了,但我遇到了一点障碍,无法在网上找到解决方案。

在菜单按钮上,我有一个 onmouseover 事件,用于显示子链接面板并为其设置动画效果。如果您将鼠标悬停在另一个菜单按钮上,面板将消失,如果您将鼠标悬停在另一个菜单按钮上,则会出现一个新面板。问题是,当您将鼠标从所需的菜单按钮移动到相应的面板上时,它会消失,显然是因为菜单按钮上有一个 onmouseout 事件来执行此操作!我需要按钮上的 onmouseout,但是当鼠标移到面板上时,如何防止它触发隐藏功能?

试图想办法解决这个问题,但到目前为止我失败了,所以任何帮助将不胜感激!

谢谢

安 迪

<script type="text/javascript">
    var anim = new Animator();
    function Animator() {
        this.slideDown = function (element, height) {
            var e = document.getElementById(element);
            var counter = 0;
            e.style.display = 'block';
            var interval = window.setInterval(function () {
                counter += 2;
                e.style.height = counter + 'px';
                if (counter >= height) {
                    clearInterval(interval);
                }
            }, 1);
        };
        this.hideSlide = function (element) {
            var e = document.getElementById(element);
            e.style.display = 'none';
            e.style.height = 0 + 'px';
        }
    }
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="divMenuBar">
    <div class="menuButton" onmouseover="anim.slideDown('divMenu1', 305);" onmouseout="anim.hideSlide('divMenu1');">Click Me</div>
    <div id="divMenu1" class="slidingMenu menu1">
        <ul>
            <li>Option 1</li>
            <li>Option 2</li>
            <li>Option 3</li>
            <li>Option 4</li>
            <li>Option 5</li>
            <li class="end">Option 6</li>
        </ul>
    </div>
    <div class="menuButton" onmouseover="anim.slideDown('divMenu2', 305);" onmouseout="anim.hideSlide('divMenu2');">Click Me</div>
    <div id="divMenu2" class="slidingMenu menu2">
        <ul>
            <li>Option 1</li>
            <li>Option 2</li>
            <li>Option 3</li>
            <li>Option 4</li>
            <li>Option 5</li>
            <li class="end">Option 6</li>
        </ul>
    </div>
    <div class="menuButton" onmouseover="anim.slideDown('divMenu3', 305);" onmouseout="anim.hideSlide('divMenu3');">Click Me</div>
    <div id="divMenu3" class="slidingMenu menu3">
        <ul>
            <li>Option 1</li>
            <li>Option 2</li>
            <li>Option 3</li>
            <li>Option 4</li>
            <li>Option 5</li>
            <li class="end">Option 6</li>
        </ul>
    </div>
    <div class="menuButton" onmouseover="anim.slideDown('divMenu4', 305);" onmouseout="anim.hideSlide('divMenu4');">Click Me</div>
    <div id="divMenu4" class="slidingMenu menu4">
        <ul>
            <li>Option 1</li>
            <li>Option 2</li>
            <li>Option 3</li>
            <li>Option 4</li>
            <li>Option 5</li>
            <li class="end">Option 6</li>
        </ul>
    </div>
</div>
</form>

我相信

你有理由不想使用 jQuery(或其他 UI 框架),所以我不会推动这个问题。 但一般来说,您必须编写类似于这些框架执行菜单的代码。

与其像现在这样盲目地隐藏鼠标输出时的元素,不如构建逻辑来查看鼠标现在结束的内容,如果鼠标在子面板上,则需要保持面板可见性。 如果您开始进入子菜单,这可能会变得相当棘手。

但不管你怎么写,这里都没有免费的午餐。 您的按钮和菜单面板需要了解彼此以及它们之间的关系。 而且,您必须明确决定隐藏和显示的内容以及何时显示。