【问题标题】:How can I show a div only when hovering a menu item or the div?如何仅在悬停菜单项或 div 时显示 div?
【发布时间】:2012-03-03 22:47:16
【问题描述】:

我的项目包含在一个无序列表中。我在此列表之外隐藏了 div(使用 display:none;)。当您将鼠标悬停在列表项上时,我希望 div 出现。如果您将鼠标从列表项移动到其下方的 div,它也必须保持可见。

我愿意通过 CSS、JavaScript/jQuery 来实现这一点。另外,我的文档设置为 HTML5。

这是我目前正在使用的。

<nav id="main-menu">
        <ul>
            <li><a class="first-link parent" href="">First Link</a></li>
            <li><a class="second-link parent" href="">Second Link</a></li>
            <li><a class="third-link parent" href="">Third Link</a></li>
            <li><a class="fourth-link parent" href="">Fourth Link</a></li>
        </ul>
    </nav><!-- #main-menu !-->

在导航下方,当我将鼠标悬停在相应的项目上时,我有想要显示的内容。

        <div id="first-widget" class="widget-container">
            <h2>Sub Title</h2>              
            <p>Lorem Ipsum
            <a href="#">Read More</a></p>

        </div><!-- .first-widget !-->


<div id="second-widget" class="widget-container">
            <h2>Sub Title</h2>              
            <p>Lorem Ipsum
            <a href="#">Read More</a></p>

        </div><!-- .second-widget !-->

<div id="third-widget" class="widget-container">
            <h2>Sub Title</h2>              
            <p>Lorem Ipsum
            <a href="#">Read More</a></p>

        </div><!-- .third-widget !-->



<div id="fourth-widget" class="widget-container">
            <h2>Sub Title</h2>              
            <p>Lorem Ipsum
            <a href="#">Read More</a></p>

        </div><!-- .fourth-widget !-->

    </aside><!-- .hidden !-->

我觉得应该有一个简单的解决方案,但到目前为止我的尝试都失败了。最大的问题是 div 不仅在悬停菜单项时显示,而且在您从菜单移动到可见 div 时也会显示。

感谢您的任何建议,感谢您抽出宝贵时间阅读本文。

【问题讨论】:

    标签: jquery html css onmouseover onmouseout


    【解决方案1】:

    这样的事情应该可以工作。

    使用.hover 绑定事件,.index.eq 查找要显示/隐藏的事件以及用于超时的原生 JS 方法让您将鼠标悬停在 div 上。

    var timeout; // store a timeout here
    
    $('#main-menu lia ').hover(function ()
    {
        $('.widget-container').eq($(this).parent().index()).show();
    }, function ()
    {
        timeout = setTimeout(function ()
        {
            $('.widget-container').eq($(this).parent().index()).hide();
        }, 1000);
    );
    
    $('.widget-container').hover(function ()
    {
        clearTimeout(timeout);
    }, function ()
    {
        timeout = setTimeout(function ()
        {
            $(this).hide();
        }, 1000);
    });
    

    【讨论】:

    • 乔,感谢您的及时回复。我将以下内容添加到我的页面,但小部件没有出现。 &lt;script type="text/javascript"&gt; $(document).ready(function() { $('#home-nav ul li a ').hover(function () { $('.widget-container').eq($(this).parent().index()).toggle(); }); } &lt;/script&gt;
    • 乔,非常感谢您抽出宝贵时间帮助我。我现在正在尝试,会告诉你进展如何。
    【解决方案2】:

    您可以将小部件包装在div 中,并将mouseleave 事件附加到它。此方案还使用rel attibute 来存储小部件idDEMO

    HTML

    <div id="wrap">
        <nav id="main-menu">
            <ul>
                <li><a class="first-link parent" rel="first-widget" href="">First Link</a></li>
                <li><a class="second-link parent" rel="second-widget" href="">Second Link</a></li>
                <li><a class="third-link parent" rel="third-widget" href="">Third Link</a></li>
                <li><a class="fourth-link parent" rel="fourth-widget" href="">Fourth Link</a></li>
            </ul>
        </nav><!-- #main-menu !-->
    
        <div id="first-widget" class="widget-container">
                    <h2>Sub Title 1</h2>              
                    <p>Lorem Ipsum
                    <a href="#">Read More</a></p>
         </div><!-- .first-widget !-->
          ...
    </div>
    

    JS

    $('#main-menu a').mouseover(function() {
       var $this = $(this);
       var id = $this.attr('rel');
       var $currentWidget = $('#' + id);
       $currentWidget.show().siblings('.widget-container').hide();
    });
    $('#wrap').mouseleave(function() {
        $('.widget-container').hide();
    });
    

    【讨论】:

    • 哦,嘿,提醒一下——我对 js 做了一点改进。
    • 再次,非常感谢。最后一个问题...有没有一种方法可以在将鼠标移到 .widget-container 上后将初始菜单项保持在 :hover 状态?
    • @alpacalips,我们怎样才能让它像下拉菜单一样工作,并像特定父菜单下的子菜单一样显示 div
    猜你喜欢
    • 2018-02-09
    • 2017-11-12
    • 1970-01-01
    • 2020-07-16
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    相关资源
    最近更新 更多