基于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 loading加载效果实现代码
Nov 24 Javascript
javascript打印html内容功能的方法示例
Nov 28 Javascript
js操作输入框提示信息且响应鼠标事件
Mar 25 Javascript
举例讲解JavaScript substring()的使用方法
Nov 09 Javascript
浅谈js中test()函数在正则中的使用
Aug 19 Javascript
vue.js  父向子组件传参的实例代码
Oct 29 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
Jun 22 Javascript
当vue路由变化时,改变导航栏的样式方法
Aug 22 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
Jan 03 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
Nov 06 Javascript
Node.js文本文件BOM头的去除方法
Nov 22 Javascript
jQuery实现广告显示和隐藏动画
Jul 04 jQuery
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中文乱码
2009/11/26 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
js简单抽奖代码
2015/01/16 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
jQuery解决input超多的表单提交
2015/08/10 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
python练习程序批量修改文件名
2014/01/16 Python
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
Python3 能振兴 Python的原因分析
2014/11/28 Python
Python写的服务监控程序实例
2015/01/31 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
python实现二维插值的三维显示
2018/12/17 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
django框架两个使用模板实例
2019/12/11 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
初中政治教学反思
2014/01/17 职场文书
庆八一活动方案
2014/01/25 职场文书
文化大革命观后感
2015/06/17 职场文书
放假通知怎么写
2015/08/18 职场文书
护理培训心得体会
2016/01/22 职场文书
Ajax是什么?Ajax高级用法之Axios技术
2021/04/21 Javascript
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python
Django一小时写出账号密码管理系统
2021/04/29 Python
一篇文章带你掌握SQLite3基本用法
2022/06/14 数据库