基于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代码
Jul 20 Javascript
用jQuery获取IE9下拉框默认值问题探讨
Jul 22 Javascript
jQuery/CSS3图片特效插件整理推荐
Dec 07 Javascript
js图片轮播手动切换效果
Nov 10 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
May 05 Javascript
JS实现的二叉树算法完整实例
Apr 06 Javascript
vue组件实现可搜索下拉框扩展
Oct 23 Javascript
Vue插值、表达式、分隔符、指令知识小结
Oct 12 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
Nov 15 Javascript
node.js中npm包管理工具用法分析
Feb 14 Javascript
JS+CSS实现3D切割轮播图
Mar 21 Javascript
vue实现员工信息录入功能
Jun 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
火车头采集器3.0采集图文教程
2007/03/17 PHP
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
php 获取全局变量的代码
2011/04/21 PHP
探讨php中遍历二维数组的几种方法详解
2013/06/08 PHP
PHP中的事务使用实例
2015/05/26 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
jquery remove方法应用详解
2012/11/22 Javascript
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
2013/09/25 Javascript
详解jquery uploadify 上传文件
2013/11/09 Javascript
jquery简单实现外部链接用新窗口打开的方法
2015/05/30 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
BootStrap select2 动态改变值的方法
2017/02/10 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
jQuery+vue.js实现的多选下拉列表功能示例
2019/01/15 jQuery
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
浅谈python标准库--functools.partial
2019/03/13 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
JAVA中运算符的分类及举例
2015/09/12 面试题
企划主管岗位职责
2013/12/12 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
2015年清明节活动总结
2015/02/09 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
海弦WR-800F
2022/04/05 无线电
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
2022/05/30 Python