javascript - 是(:hover) alternative for ie & firefox

标签 javascript jquery

我有一个菜单,它在滚动时显示一个不是菜单子(monad)项的 div,当您滚动时它再次隐藏该 div。 div 直接放置在菜单项下方,模仿子菜单。

html 看起来像这样 -

这是我的菜单 -

<div id="nav">
<ul>
    <li class='with_panel'>
      <span id='panel1' class='current'><img src='theImage' /></span>
    </li>
    <!-- more list items -->
</ul>
</div>

在一个不相关的 div 中,我有这个 -

<div id="panels">
     <div style="" id="panel1_panel" class="panel">
        <img src="myImage.png">
     </div>
<div>

我有一些 jquery 可以在你滑过 li 时显示和隐藏相关面板 -

$("#nav .with_panel").mouseenter(function(){
    var id = $(this).find("span").attr("id");
    $(".panel").removeClass("open");
    $panel = $("#" + id + "_panel");
    $panel.addClass("open");
    $img = $(this).find("span img");
    $img.addClass("on");
    var hide = function(){
    if(!$panel.is(":hover")){
            $img.removeClass("on");
            $panel.removeClass("open");
        }
    }

    $panel.mouseleave(hide);
    $(this).mouseleave(hide);   
})

这似乎只适用于 Chrome,我相当确定这是由于 ie 和 Firefox 无法识别 .is(":hover")。

我无法更改 html 结构,只能更改 javascript。所以我正在努力让它跨浏览器工作。有什么想法吗?

最佳答案

以下代码为您提供了 200 毫秒的超时时间 (hide_to),以便您在隐藏菜单之前离开菜单并进入您的面板。反之亦然。如果您用鼠标进入菜单项或面板,隐藏超时将被取消,并在鼠标离开它们中的任何一个时重新启动。

$("#nav .with_panel").each(function() {
    var id = $(this).find("span").attr("id"),
        $panel = $("#" + id + "_panel"),
        $img = $(this).find("span img"),
        hide_to = null;

    var hide = function() {
            // start hide timeout
            hide_to = window.setTimeout(function () {
                $img.removeClass("on");
                $panel.removeClass("open");
            },200);
        };

    var show = function() {
            // clear hide timeout
            window.clearTimeout(hide_to);
            if (!$panel.is(".open"))
            {
                // open panel, only if it is not open already
                $(".panel").removeClass("open");
                $panel.addClass("open");
                $img.addClass("on");
            }
        };

    $(this).mouseenter(function() {
        show();
    }).mouseleave(function() {
        hide();
    });

    $panel.mouseenter(function() {
        show();
    }).mouseleave(function() {
        hide();
    });
});

关于javascript - 是(:hover) alternative for ie & firefox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6279386/

相关文章:

javascript - Ajax 发布未捕获的语法错误 : Unexpected token ILLEGAL

javascript - 我无法从移动设备上的输入中写入任何值

c# - 从 javascript 调用 ASP 生成的按钮单击

JavaScript 回调/与 require.js/objects 的混淆

javascript - 无法获取最接近的上一个 td 输入的值

javascript - 如何使用 html 和 jquery 在 MAP 标签上放置标记?

javascript - 使用 replaceWith() 替换数组中的逗号?

javascript - JS : Issue getting values from drop-down menu to replace parts of HREF strings

javascript - 我做了一个计算器,但我不知道如何显示计算器如何进行数学运算

javascript - 如何在 ext js 中为标签文本加下划线?