【问题标题】:Jquery based drop-down navigational menu基于jQuery的下拉导航菜单
【发布时间】:2012-08-17 13:06:56
【问题描述】:

我正在尝试创建动画(几乎没有)下拉菜单。如果您查看我的页面的源代码,则可以使用 JS 文件。我有它基本上工作。

我的问题是:当我将鼠标悬停在主菜单中的某个内容上,然后直接向下进入弹出(向下)的子菜单时,如果我随后将鼠标悬停在该菜单中的某个内容上并离开它会留下来。

http://lmiah.site11.com/slide%20down%20box%20menu%20new/mainTest.html

为了避免混淆,我将举一个直接的例子

如果您将鼠标悬停在“职业”上,然后直接向下移动,然后将鼠标悬停在“员工感言”上,然后将鼠标完全从菜单上移开,菜单仍然会保留,直到您再次将鼠标悬停在“职业”上。

任何帮助将不胜感激!

编辑:我发现它与a href="# class="subMenuFloat" 有关每当我将鼠标悬停在这些链接上(它们是隐藏下拉菜单中的链接)时,我的下拉 div 仍然存在。我不知道为什么会发生这种情况,但如果我只是将鼠标悬停在 li 上,而错过了链接,它会正确退出。

【问题讨论】:

  • 我认为你应该为 .dropdown 类添加一个 mouseout 事件
  • 我正在考虑做类似的事情,但是当您将鼠标悬停在下拉 div 上时,我发现它很奇怪,并且在它被卡在那里之后,它会消失 - 在您将鼠标悬停在“职业”上之后它会消失再次。
  • 试试这个不会有坏处的--> href="javascript:void(0)"
  • 您没有使用任何 onclick 功能,所以没关系......对不起,我的错
  • 是的,基本上我想知道为什么将鼠标悬停在链接上会导致下拉菜单停留...这很奇怪,但我正在寻找解决方案,但找不到任何解决方案。

标签: javascript jquery drop-down-menu navigation


【解决方案1】:

演示: http://jsbin.com/welcome/13456

不使用菜单插件的示例,这只是一个概念证明

$(function() {
    var flag = false;
    $('#mainMenu li.mainMenuItems').hover(function() {
        if (!flag)
            $(this).find('.submenu').slideDown(500);

    }, function() {
        if (!flag)
            $(this).find('.submenu').slideUp(500);
    });

    $('#mainMenu li.mainMenuItems .submenu').hover(function() {
        flag = true;
    }, function() {
        $(this).slideUp(500);
        flag = false;
    });
});

【讨论】:

  • 这与我需要的非常相似,但是过渡效果是必要的,当我将鼠标悬停在它们上时,div 会改变背景。 (当您将鼠标悬停在“职业”上时,请参阅它。)
  • 就像我在另一个答案中提到的那样,我可能会放弃这个并从头开始(这最初不是我的代码。)-.-
  • 你可以只包含缓动插件并使用 like .slideDown({ duration: 1000, easing : 'easeBounceOut' ...! 如果你知道问题不在于插件本身,那么它就是css 有什么问题;否则看我的例子使用标志模式!
  • 非常感谢,我想我对它有了更好的理解!
【解决方案2】:

这是在 jquery 中使用悬停功能时的常见问题,因为您使用的选择器实际上是从一个元素移动到另一个元素。这是我这样做的方式,基本上你在菜单的 li 中设置了一个 div 或 li 。示例:

<ul class="menu-hover">
  <li class="menu one">Menu Option One
    <div> Here is the drop down menu</div>
  </li>
  <li class="menu two">Menu Option One
    <div> Here is the drop down menu</div>
  </li>
</ul>

jquery 会是

基本上这是说,当您将鼠标悬停在菜单中的一个 li 上时,隐藏该菜单下的所有 div,这将是您下拉菜单中的所有菜单,然后显示悬停的 li 下的 div。您需要将 li 位置设为相对位置,将 div 设为绝对位置。所以理论上 div 包含在 li 下,因此当您将鼠标悬停时它会保持打开状态。

$(".menu-hover li").hover(function(){ 

 //Hide each div on hover
  $(".menu div").each(function(){
    $(this).hide();
  });

  $("div", this).show();
});

【讨论】:

  • $(".menu div").hide();就够了,不用循环了!
  • 好收获!没想到
  • 我尝试了类似的东西,但是使用我的代码 - 在我浏览子菜单 li 后它仍然存在。
  • 尝试在你的 .submenu 类中添加一个 overflow: hidden 属性。由于您的 lis 是浮动的,子菜单容器的高度为 0。溢出隐藏将处理此问题
  • 尝试了溢出:隐藏,仍然显示:/ 我可能只是废弃这个并从头开始,这令人沮丧-.-
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多