基于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 相关文章推荐
网易JS面试题与Javascript词法作用域说明
Nov 09 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
Jan 30 Javascript
JQuery中如何传递参数如click(),change()等具体实现
Apr 28 Javascript
js 调用父窗口的具体实现代码
Jul 15 Javascript
Jquery获得控件值的三种方法总结
Feb 13 Javascript
JS实现点击按钮后框架内载入不同网页的方法
May 05 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
Jan 22 Javascript
js中的 || 与 &amp;&amp; 运算符详解
May 24 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
Sep 14 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
Feb 20 Javascript
node基于async/await对mysql进行封装
Jun 20 Javascript
基于Express框架使用POST传递Form数据
Aug 10 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截取后台登陆密码的代码
2012/05/05 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
javascript 建设银行登陆键盘
2008/06/10 Javascript
Cookie 小记
2010/04/01 Javascript
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
通过jquery 获取URL参数并进行转码
2014/08/18 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
antd配置config-overrides.js文件的操作
2020/10/31 Javascript
python通过post提交数据的方法
2015/05/06 Python
python实现批量监控网站
2016/09/09 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
python+os根据文件名自动生成文本
2019/03/21 Python
python按比例随机切分数据的实现
2019/07/11 Python
python sqlite的Row对象操作示例
2019/09/11 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
北京银河万佳Java面试题
2012/03/21 面试题
销售团队激励口号
2014/06/06 职场文书
亲子运动会的活动方案
2014/08/17 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
专家推荐信范文
2015/03/26 职场文书
个人催款函范文
2015/06/23 职场文书
安全责任协议书范本
2016/03/23 职场文书