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();
}
}