javascript - jquery 脚本 : z-index and setTimeout 的两个问题

标签 javascript jquery html css

在网站的左侧有一个侧面菜单。我希望子菜单以简洁的动画向右滑动打开。我已经制作了脚本:

jQuery(document).ready(function($){
    $(".main-navigation ul li").mouseenter(function() {
        if ($(this).children().length > 0) {
            $(this).children("ul").css ({
            "display" : "block",
            }).animate({
                left: '250px',
                opacity: 1,
                }, 500)
            }})
            .mouseleave(function() {
                setTimeout(function() {
                    $(this).children("ul").css({
                    "display" : "none",
                    "left" : "0px",
                    "opacity": 0,
                    }) 
                }, 1000);
            });
});

滑动效果很好。菜单显示得很好。

不过有两个问题。一是菜单 z-index 不起作用。子菜单的 ul 在 css 中设置了一个负索引,但是当它滑动时它会越过主 ul。我希望它在菜单下,所以它不显示。 第二个是,SetTimeout 函数似乎不起作用。一旦鼠标离开该区域,ul 就会永远留在那里。如果没有 Settimeout 函数,它会很好地消失(虽然我希望它立即停留在那里一段时间)。

我做了一个jsfiddle例子 http://jsfiddle.net/r8vx07ae/4/

最佳答案

z-index 的问题:

元素不能出现在其父元素之后。由于子菜单作为菜单的子元素存在,它不会出现在菜单后面,z-index实际上只适用于共享同一父元素的两个元素。

setTimeout 的问题:

问题很可能是因为 this 变量在超时发生时超出了范围。这有一个简单的解决方法:创建一个全局变量(比如 subMenu)并在超时发生之前设置 subMenu = this 并将 this 替换为 subMenu你的超时功能。如果您有多个子菜单,则可以使用其他变量或字典/数组,以防止在两个子菜单一个接一个打开时变量被覆盖

关于javascript - jquery 脚本 : z-index and setTimeout 的两个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28117141/

相关文章:

javascript - jQuery html() 不适用于字符串

html - CSS:如何拥有与按钮大小相同的按钮背景图像?

javascript - 隐藏 Ember 咆哮通知时删除 div

javascript - 当用户按下回车键时触发,但当焦点丢失时不触发

javascript - 使用javascript更改文本框文本颜色

javascript - 尝试迭代数据集

javascript - Dayjs:无法将自定义 24 小时时间格式化为 12 小时

javascript - JQuery 淡出只有在控制台中输入时才有效

jquery - 我如何检查我的访客是否已登录 Facebook?

javascript - Chart.JS 条形图抛出关于缺失的错误)