基于jQuery实现的菜单切换效果


Posted in Javascript onOctober 16, 2015

这是一个非常流畅的菜单展示效果,应用在亚马逊上,当你上下移动鼠标的时候,二级菜单会非常轻快的切换,没有任何延时,给用户如滑丝般的感觉。这种效果借助于一款jQuery插件menu-aim,本文将结合实例讲解如何实现速度超快的菜单效果。

基于jQuery实现的菜单切换效果

HTML
首先建立主菜单,我们借用电商网站常见的商品分类。其html结构代码如下,其中我们用到了html5的data-submenu-id属性设置,这在插件调用时非常有用。

<div class="active"> 
  <ul class="dropdown-menu" role="menu"> 
    <li data-submenu-id="submenu-patas"><a href="#">服装服饰</a></li> 
    <li data-submenu-id="submenu-snub-nosed"><a href="#"> 箱包配饰</a></li> 
    <li data-submenu-id="submenu-duoc-langur"><a href="#">数码家电</a></li> 
    <li data-submenu-id="submenu-pygmy"><a href="#">美容护发</a></li> 
    <li data-submenu-id="submenu-tamarin"><a href="#">母婴用品</a></li> 
    <li data-submenu-id="submenu-monk"><a href="#">家居建材</a></li> 
    <li data-submenu-id="submenu-gabon"><a href="#">食品百货</a></li> 
    <li data-submenu-id="submenu-grivet"><a href="#">户外汽车</a></li> 
    <li data-submenu-id="submenu-red-leaf"><a href="#">文化玩乐</a></li> 
    <li data-submenu-id="submenu-king-colobus"><a href="#">生活服务</a></li> 
  </ul> 
</div>

子菜单与主菜单对应,每一个子菜单的id属性值必须与主菜单的data-submenu-id属性值对应,子菜单内容可以为任意html标签代码,p,img,audio都可以,格式如下:

<div id="submenu-patas" class="popover"> 
任意html代码 
</div>

CSS
我们将主菜单dropdown-menu位置固定,子菜单popover默认隐藏,通过css3技术可以设置菜单阴影圆角效果,子菜单内容的css可以根据需要自由发挥。

.active{position:relative} 
.dropdown-menu { position: absolute; 
 z-index: 1000;float: left; 
 min-width: 120px;padding: 5px 0;margin: 2px 0 0;list-style: none; 
 background-color: #ffffff;border: 1px solid #ccc; 
 -webkit-border-radius: 6px;-moz-border-radius: 6px;border-radius: 6px; 
 -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow: 0 5px 10px 
rgba(0, 0, 0, 0.2);box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); 
} 
.dropdown-menu li{height:24px; line-height:24px; text-align:center} 
.dropdown-menu li a{display:block} 
.dropdown-menu li a:hover{color:#fff; text-decoration:none; background:#39f} 
.popover { 
 position: absolute;top: 0;left: 0; z-index: 1010;display: none; 
 width: 320px;-webkit-border-radius: 6px;-moz-border-radius: 6px;border-radius: 6px; 
 -webkit-border-top-left-radius: 0px;-webkit-border-bottom-left-radius: 0px; 
 border-top-left-radius: 0px;border-bottom-left-radius: 0px;overflow: hidden;    
 padding: 1px 1px 1px 15px;text-align: left;white-space: normal; 
 background-color: #fff;border: 1px solid #ccc; 
 border: 1px solid rgba(0, 0, 0, 0.2); 
 webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow: 0 5px 10px 
rgba(0, 0, 0, 0.2);box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); 
}

jQuery
下面我们隆重推出jquery.menu-aim.js,该插件是一款基于jQuery的菜单插件,插件作者关注了用户体验并精于算法,根据鼠标轨迹,将菜单切换效果实现得淋漓精致,该插件“超快”的反应效果是不是让我们有中“超爽”的感觉?插件地址:
使用$(element).menuAim()调用jquery.menu-aim.js,当鼠标触发主菜单时调用自定义函数activateSubmenu(),当离开主菜单时调用自定义函数deactivateSubmenu()。

$(function(){ 
   $(".dropdown-menu").menuAim({ 
      activate: activateSubmenu,//触发主菜单,显示子菜单 
      deactivate: deactivateSubmenu //离开主菜单,隐藏子菜单 
   }); 
});

如上调用就可以完成子菜单间的快速切换,jquery.menu-aim.js还提供其他几种方法,enter()和exit(),都是控制鼠标移入移出、调用函数等。
接下来,我们写上自定义函数

var $menu = $(".dropdown-menu"); 
 
function activateSubmenu(row) { 
  var $row = $(row), 
  submenuId = $row.data("submenuId"), 
  $submenu = $("#" + submenuId), 
  offset = $menu.offset(), 
  height = $menu.outerHeight(), 
  width = $menu.outerWidth(); 
 
  $submenu.css({ //设置子菜单样式 
     display: "block", //显示子菜单 
     top: offset.top, 
     left: offset.left + width - 5, 
     height: height - 4  
  }); 
  //设置主菜单样式(鼠标滑向主菜单时) 
  $row.find("a").addClass("maintainHover"); 
} 
 
function deactivateSubmenu(row) { 
  var $row = $(row), 
  submenuId = $row.data("submenuId"), 
  $submenu = $("#" + submenuId); 
 
  $submenu.css("display", "none"); //隐藏子菜单 
  $row.find("a").removeClass("maintainHover");恢复主菜单样式 
}

怎么样,你也可以做一个amazon.cn式的菜单效果了,以上就是本文的全部内容,希望本文对大家学习jquery有所帮助。

Javascript 相关文章推荐
JavaScript 密码强度判断代码
Sep 05 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
Mar 25 Javascript
解析jQuery与其它js(Prototype)库兼容共存
Jul 04 Javascript
jQuery下的动画处理总结
Oct 10 Javascript
jquery 图片缩放拖动的简单实例
Jan 08 Javascript
Jquery搜索父元素操作方法
Feb 10 Javascript
购物车前端开发(jQuery和bootstrap3)
Aug 27 Javascript
深入理解ES6学习笔记之块级作用域绑定
Aug 19 Javascript
js定时器实现倒计时效果
Nov 05 Javascript
分享ES6的7个实用技巧
Jan 18 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
Aug 14 Javascript
layer弹出层扩展主题的方法
Sep 11 Javascript
javascript判断复选框是否选中的方法
Oct 16 #Javascript
jquery判断复选框是否被选中的方法
Oct 16 #Javascript
基于jquery实现复选框全选,反选,全不选等功能
Oct 16 #Javascript
js生成随机数的方法实例
Oct 16 #Javascript
jQuery实现商品活动倒计时
Oct 16 #Javascript
js如何打印object对象
Oct 16 #Javascript
JavaScript各类型的关系图解
Oct 16 #Javascript
You might like
php $_ENV为空的原因分析
2009/06/01 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
HTML中嵌入PHP的简单方法
2016/02/16 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
jquery实现焦点图片随机切换效果的方法
2015/03/12 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
vue.js从安装到搭建过程详解
2017/03/17 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
深入理解Node module模块
2018/03/26 Javascript
JS限制输入框输入的实现代码
2018/07/02 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
Python实现聊天机器人的示例代码
2018/07/09 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
Pandas的Apply函数具体使用
2020/07/21 Python
python 获取字典键值对的实现
2020/11/12 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
python 如何引入协程和原理分析
2020/11/30 Python
生产总经理岗位职责
2013/12/19 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
民政局未婚证明
2015/06/15 职场文书
2015暑假假期总结
2015/07/13 职场文书
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL