Javascript 调整屏幕大小或更改屏幕方向后显示和隐藏弹出菜单的意外行为

Javascript 调整屏幕大小或更改屏幕方向后显示和隐藏弹出菜单的意外行为,javascript,jquery,html,css,popup,Javascript,Jquery,Html,Css,Popup,我正在制作一个菜单,它允许我打开和关闭弹出内容。按下按钮可打开菜单,再次单击按钮或单击弹出式内容容器以外的任何位置可关闭菜单 当我使用我的代码时,我遇到了一个奇怪的问题,在调整窗口大小或更改屏幕方向(例如在平板电脑上)后,然后单击菜单按钮,弹出窗口将无法保持打开状态。它在打开后立即打开并隐藏 我无法在中复制此错误,但我举了一个示例,其中我使用了相同的代码 为什么我在演示页面上遇到这个问题?如何避免呢?我的代码是否有一些我不知道的限制 这是一个在每个按钮上单击处理程序的函数 function ma

我正在制作一个菜单,它允许我打开和关闭弹出内容。按下按钮可打开菜单,再次单击按钮或单击弹出式内容容器以外的任何位置可关闭菜单

当我使用我的代码时,我遇到了一个奇怪的问题,在调整窗口大小或更改屏幕方向(例如在平板电脑上)后,然后单击菜单按钮,弹出窗口将无法保持打开状态。它在打开后立即打开并隐藏

我无法在中复制此错误,但我举了一个示例,其中我使用了相同的代码

为什么我在演示页面上遇到这个问题?如何避免呢?我的代码是否有一些我不知道的限制

这是一个在每个按钮上单击处理程序的函数

function mainMenuFunction(eid) {
    var num = $(eid).attr('id').substr($(eid).attr('id').length - 1);
    var elem = $("#menu-content-" + num);
    var parent = $("#menu-item-" + num);
    var p = parent.position();
    var o = parent.offset();

    if (elem.css("display") == "none") {
        elem.slideDown();
    } else {
        elem.slideUp();
    }

    $(document).click(function (e) {
        // position of the menu item
        var hstart = o.left;
        var hend = o.left + parent.width();
        var vstart = o.top;
        var vend = o.top + parent.height();

        // position of the menu container
        var chstart = elem.offset().left;
        var chend = elem.offset().left + elem.width();
        var cvstart = elem.offset().top;
        var cvend = elem.offset().top + elem.height();

        if (!(((e.clientX >= hstart) && (e.clientX <= hend)) && ((e.clientY >= vstart) && (e.clientY <= vend)))) {
            if (!(((e.clientX >= chstart) && (e.clientX <= chend)) && ((e.clientY >= cvstart) && (e.clientY <= cvend)))) {
                elem.slideUp();
            }
        }
    });
}

那剧本的目的是什么。请解释一下

  if (!(((e.clientX >= hstart) && (e.clientX <= hend)) && ((e.clientY >= vstart) && (e.clientY <= vend)))) {
            if (!(((e.clientX >= chstart) && (e.clientX <= chend)) && ((e.clientY >= cvstart) && (e.clientY <= cvend)))) {
                elem.slideUp();
            }
        }

我遇到的问题是由动画序列引起的。动画执行时间太长,不允许执行整个脚本,因此某些事件处理程序无法按时激活。此问题的解决方案是完全删除或真正加快元素隐藏或显示的动画。

我使用此选项,因此如果用户调整窗口大小,它将隐藏所有菜单元素,这样我的移动菜单和主寻呼机菜单就不会混乱。我的意思是,问题不在于调整窗口大小时菜单会隐藏,而是在调整窗口大小后,单击菜单,菜单容器会立即打开和关闭。@HelpNeeder让我检查您是否更改了任何内容?不,即使我比较了旧代码和新代码,它们都是相同的,但现在正在运行。这将查找菜单按钮的坐标,和菜单内容容器。如果在菜单容器打开时鼠标单击位于它们之外,则会导致菜单内容容器崩溃。这样,当用户单击第二个菜单项或其他任何地方时,菜单内容容器将自动关闭。
  if (!(((e.clientX >= hstart) && (e.clientX <= hend)) && ((e.clientY >= vstart) && (e.clientY <= vend)))) {
            if (!(((e.clientX >= chstart) && (e.clientX <= chend)) && ((e.clientY >= cvstart) && (e.clientY <= cvend)))) {
                elem.slideUp();
            }
        }