建立一个jQuery菜单

Posted

技术标签:

【中文标题】建立一个jQuery菜单【英文标题】:building a jquery menu 【发布时间】:2015-02-13 08:23:55 【问题描述】:

我已经建立了一个 jquery 菜单。

但是它不是很优雅而且相当笨重。例如,当您单击“菜单”时,它会很快打开和关闭。

此外,如果您打开菜单并将鼠标悬停在链接上,单击链接的左侧或右侧会导致菜单再次突然关闭

请有人帮我把它弄得更优雅一点吗?我尝试过使用幻灯片效果,但是当用户将鼠标悬停在菜单上时,它会产生弹跳效果(菜单不断打开和关闭)

这是我的代码:fiddle

$(document).ready(function() 
  $('.menu').click(function() 
    $('.submenu').fadeToggle('1000');
  );
);
.menu 
  width: 300px;
  margin: 20px auto 0 300px;
  vertical-align: top;
  padding: 0;
  font-size: 18px;
  color: white;
  text-align: center;
  background: #34495E;
  border: 0px;
  border-bottom: 2px solid #2C3E50;
  -webkit-box-shadow: inset 0 -2px #34495E;
  box-shadow: inset 0 -2px #34495E;
  clear: both;
  margin-left: 66px;


.submenu 
  width: 300px;
  background-color: #6D767F;
  padding: 0px;
  margin: 0 auto;
  text-align: center;
  font-size: 15px;
  color: #FFF;
  display: none;


ul li 
  list-style: none;
  padding: 11px;
  margin: 0px;
  text-transform: lowercase;
  font-weight: 700;


ul li a 
  text-decoration: none;
  font-size: 1.1em;
  color: #FFF;


ul li a:visited 
  text-decoration: none;


.submenu ul li:hover 
  background-color: #719ECC;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="menu">
  <!-- START HEADER -->
  <ul>
    <li>menu</li>
  </ul>
  <div class="submenu">
    <ul>
      <li><a href="#">Mountain Bike</a></li>
      <li><a href="#">gopro</a></li>
      <li><a href="#">Shoei Helmet</a></li>
    </ul>
  </div>

【问题讨论】:

不要只在问题中放置小提琴链接。当然也不要像这样绕过 “请将您的代码放在问题中” 弹出窗口! 【参考方案1】:

看来你是一个学习者使用这个代码

 ul 
      height: 100%;
        margin: 0;
        padding: 0;
        width: 100%;   
    

jquery

$ (document).ready(function() 

    $ ('.menu').click(function() 
    $('.submenu').slideToggle('1000');
);

);

demo

【讨论】:

考虑到 OP 是“学习者”,您可能想解释一下您在那里做什么 Thakns 伙计们,我已经学习了 3 个小时的 jquery,所以我有点摇摇欲坠。我使用了滑动切换并修改了我的 CSS。一切正常!谢谢 如果我的回答对你有帮助,请评分【参考方案2】:

由于您一直在做的所有“褪色”,它会突然打开,而是使用slideDown() 打开菜单,这给它一个非常不错的条目.. 和slideUp() 关闭它。

使用mouseenter() 事件打开并使用mouseleave() 事件关闭它,而不是单击。

ulli 中删除额外的marginspaddings

它已经准备好像新的一样使用了。

您所说的slide event 的弹跳效果(菜单不断打开和关闭),使用stop() 可以轻松纠正。当在元素上调用.stop() 时,当前正在运行的动画(如果有)会立即停止。

我让代码简单易懂……还有很多方法可以做同样的事情。

演示:http://jsfiddle.net/s94xhnw6/3/

jQuery:

$(document).ready(function () 
    $('.menu').on('mouseenter', function () 
        $('.submenu').slideDown();
    );

     $('.menu').on('mouseleave', function () 
        $('.submenu').stop().slideUp();
    );    
);

【讨论】:

【参考方案3】:

Demo

$(document).ready(function() 
  $('.menu').click(function() 
    $('.submenu').slideToggle('600'); /* using slideToggle will make the list slide elegantly */
  );
);
/* some changes to make it look elegant. */

body 
  font-family: helvetica;


.menu 
  width: 300px;
  margin: auto;
  vertical-align: top;
  padding: 0;
  font-size: 18px;
  color: white;
  text-align: center;
  background: #34495E;
  border: 0px;
  border: 2px solid #2C3E50;
  -webkit-box-shadow: inset 0 -2px #34495E;
  box-shadow: inset 0 -2px #34495E;


.submenu 
  width: 300px;
  background-color: #6D767F;
  padding: 0px;
  margin: 0 auto;
  text-align: center;
  font-size: 15px;
  color: #FFF;
  display: none;


ul 
  margin: 0;
  padding: 0;


ul li 
  list-style: none;
  padding: 11px;
  margin: 0px;
  text-transform: lowercase;


ul li a 
  text-decoration: none;
  font-size: 1.1em;
  color: #FFF;


ul li a:visited 
  text-decoration: none;


.submenu ul li:hover 
  background-color: #719ECC;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="menu">
  <!-- START HEADER -->
  <ul>
    <li>menu</li>
  </ul>
  <div class="submenu">
    <ul>
      <li><a href="#">Mountain Bike</a>
      </li>
      <li><a href="#">gopro</a>
      </li>
      <li><a href="#">Shoei Helmet</a>
      </li>
    </ul>
  </div>

【讨论】:

以上是关于建立一个jQuery菜单的主要内容,如果未能解决你的问题,请参考以下文章

如何用CSS和jQuery实现一个侧滑导航菜单

jQuery简单的下拉菜单?

ajax实现三级联动下拉菜单

一个可折叠的jQuery菜单插件

雷林鹏分享:jQuery EasyUI 菜单与按钮 - 创建菜单按钮

需要一个用于垂直菜单栏的 jquery 插件