【问题标题】:Jquery Slide Down Menu [closed]Jquery向下滑动菜单[关闭]
【发布时间】:2013-04-26 18:40:54
【问题描述】:

有谁知道是否有一个 JQuery 插件可以创建类似于此处所介绍的“向下滑动”菜单:http://www.bu.edu/

不确定我是否对这种类型的菜单使用了正确的术语,并且我已经在 Google 和 StackOverflow 上搜索了一段时间,但没有成功....

提前致谢!

【问题讨论】:

  • 感谢大家的帮助!你所有的答案都很有帮助。这是我到目前为止提出的解决方案:jsfiddle.net/akil_ja/jyrkV/2。最后一个问题:如果有人可以给我一个提示,告诉我当用户快速进出时如何阻止菜单像疯了一样上下弹跳,不胜感激! (我怀疑 setTimeout 可能对此有用,但不确定如何实现它......)

标签: jquery menu slidedown


【解决方案1】:

你有没有尝试过不使用 js 或 jQuery 的方法?

我的意思是,你可以只使用带有 CSS3 过渡的 HTML5。

看起来像这样:

HTML:

<div id="menu">
<ul>
    <a href="#"><li>Menu 1</li></a>
    <a href="#"><li>Menu 2</li></a>
    <a href="#"><li>Menu 3</li></a>
    <a href="#"><li>Menu 4</li></a>
    <a href="#"><li>Menu 5</li></a>
    <a href="#"><li>Menu 6</li></a> 
</ul>

CSS

a {
font-family: verdana;
color: #fff;
font-size: 11px;   
}

a:hover {
color: #cff;    
}
#menu {

background: #666;
height: 30px;
width: 377px; 
transition:height 0.5s;
-webkit-transition:height 0.5s;
}

#menu:hover {
 height: 200px;     
}

ul {    
padding: 0; margin: 0;
padding-right: 10px;
position: absolute;    
}

ul li {
float: left;
display:block;
padding: 10px;
margin: 0;
background: #333;
border-right: 1px solid #666
}

#outset {
width: 377px; height: 200px;
background: #900;

}

看看这个JsFiddle example


编辑

为了满足您的问题,我对上面的代码进行了一些更改并添加了一些 jQuery。 像这样:

$(document).ready(function() {
  $("#subMenu").hide(); 
});

$("#menu").hover(
  function() {
    $("#subMenu").show('fast');        
  },
  function() {
    $("#subMenu").hide('fast'); 
  }
);

你可以在这个JsFiddle example看到结果

【讨论】:

  • +1 表示没有 JS。但是如果需要转换并且它们不受支持(又名 IE 等),只需使用 .animate()(如果使用 jQuery :D)
  • 感谢 Christian 和他在这个问题上跳出框框思考。我可以在您的示例(对于我的应用程序)中看到的唯一问题是我将有嵌套的子链接,并且您的 html 需要修改以适应这一点。否则你的例子太棒了......谢谢!
  • @AkilA.Then 你可以试试这个例子:jsfiddle.net/xWQ2Z
  • @Christian:很好!这几乎就是我想要的......谢谢男人:D
  • @AkilA。很高兴为您提供帮助!
【解决方案2】:

如果没有插件,那将很容易构建。创建一个子菜单 div 并在 CSS 中设置 display:none。

然后创建一个悬停侦听器来“向下滑动”子菜单。

在悬停事件的mouseout部分,不是简单的关闭子菜单,而是将子菜单的关闭包裹在一个200ms的setTimeout中,然后在子菜单中添加一个mouseover事件来取消setTimeout:(否则子菜单会离开菜单后立即关闭)

var menuTimer;

$("#menu").hover(function() {
    //Slide down the submenu
    $("#sub_menu").slideDown();
}, function() {
    //Create a 200ms timer, after which it will close the sub_menu
    menuTimer = setTimeout(function() {
                        $("#sub_menu").slideUp();
                    },200);
});

$("#sub_menu").mouseenter(function() {
    //The user entered the submenu, so cancel the timer (don't close the submenu)
    clearTimeout(menuTimer);
});

【讨论】:

  • 感谢您的提示和示例。此解决方案的唯一问题是屏幕阅读器需要可以访问该站点,并且据我了解,显示 none 可能会导致屏幕阅读器忽略内容的某些问题....我可能会做类似的事情,但要设置高度以显示/隐藏辅助链接...干杯
  • @AkilA 然后将高度设置为 0,而不是使用 slideDown 和 slideUp,而是使用 jQuery.animate 为高度设置动画
【解决方案3】:

您为什么不自己制作菜单? 尝试使用列表 &lt;ul&gt;jQuery .mouseover() 来制作具有 blind 效果的 .show() 的 div jQuery UI

【讨论】:

  • 感谢您的回复。如果没有可用的插件,我最终可能会创建自己的菜单,但我认为如果有插件,重新发明轮子是没有意义的......
  • 好吧,我真的建议你自己做,但看看这个页面我认为它会有所帮助Dropdown Menus
  • 感谢您的链接。我真的在寻找实际上将菜单下方的内容向下推的任何示例/插件......而不是将下拉选项覆盖在内容上。不过,我正在听取您的建议,我可能只需要从头开始创建它...干杯
  • 是的,这样更好,为了使菜单向下推送内容,您可以使用 css display:block;在每个菜单 div 上
【解决方案4】:

看看这个: Dropdown menu

$('li').mouseover(function() {
    var this_menu = $(this).attr('class');
    if($('.menu_div').is(':visible')) {
       $('.menu_div').hide('blind', 'fast');
    }
    $('#' + this_menu).show('blind', 'fast'); 
});
$('.menu_div').mouseout(function() {
   var this_menu = $(this).attr('class');
   $('.menu_div').hide('blind', 'fast'); 
});

它是用 jQuery 和 jQuery-UI 制作的 因此,如果您使用它,请添加您的文档 &lt;head&gt; jQuery 库并在 jQuery-UI 之后导致 jQuery-UI 需要 jQuery 才能工作

【讨论】:

  • 谢谢!这个例子的唯一问题是我真的想在菜单悬停时显示所有子选项......我认为这是这种类型菜单相对于标准下拉菜单的主要优势之一......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多