jQuery实现级联菜单效果(仿淘宝首页菜单动画)


Posted in Javascript onApril 10, 2014

相信初学HTM+DIV+CSSl的同学们肯定也想做出淘宝网首页的菜单动画吧。今天我们就带大家体会一下级联菜单的显示。小编我只是实现了简单地效果,不过总体来说原理是一样的哦,那么先让大家看看效果图吧。

那么要实现这个效果我们当然要使用到的是jQuery,那么我就开始讲解怎么做的了,先上html和css的代码

<!DOCTYPE html> 
<html> 
<head> 
<title>menu.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
<meta http-equiv="description" content="this is my page"> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
<link rel="stylesheet" type="text/css" href="../css/menu.css"> 
<script type="text/javascript" src="../js/jquery-1.10.2.js"></script> 
<script type="text/javascript" src="../js/menu.js"></script> 
</head> 
<body> 
<ul> 
<li class="menu"> 
<div class="title"> 
<span>电脑数码类产品</span> 
</div> 
<ul class="content"> 
<li class="optn"><a href="#">笔记本</a> 
<ul class="tip"> 
<li><a href="#">笔记本1</a></li> 
<li><a href="#">笔记本1</a></li> 
<li><a href="#">笔记本1</a></li> 
<li><a href="#">笔记本1</a></li> 
</ul> 
</li> 
<li class="optn"><a href="#">移动硬盘</a> 
<ul class="tip"> 
<li><a href="#">移动硬盘1</a></li> 
<li><a href="#">移动硬盘1</a></li> 
<li><a href="#">移动硬盘1</a></li> 
<li><a href="#">移动硬盘1</a></li> 
</ul> 
</li> 
<li class="optn"><a href="#">电脑软件</a> 
<ul class="tip"> 
<li><a href="#">电脑软件1</a></li> 
<li><a href="#">电脑软件1</a></li> 
<li><a href="#">电脑软件1</a></li> 
<li><a href="#">电脑软件1</a></li> 
</ul> 
</li> 
<li class="optn"><a href="#">数码产品</a> 
<ul class="tip"> 
<li><a href="#">数码产品1</a></li> 
<li><a href="#">数码产品1</a></li> 
<li><a href="#">数码产品1</a></li> 
<li><a href="#">数码产品1</a></li> 
</ul> 
</li> 
</ul> 
</li> 
</ul> 
</body> 
</html>

menu.css
@CHARSET "UTF-8"; *{ 
margin: 0px; 
padding: 0px; 
} 
ul,li{ 
list-style-type: none; 
} 
.menu{ 
width: 190px; 
border: 1px red solid; 
background-color: #fffdd2; 
} 
.optn{ 
width: 190px; 
line-height: 28px; 
border-top: 1px red dashed; 
} 

.content{ 
padding-top:10px; 
clear: left; 
} 

a{ 
text-decoration: none; 
color: #666; 
padding: 10px; 
} 
.optnFocus{ 
background-color: #fff; 
font-weight: bold; 
} 
div{ 
padding: 10px; 
} 
.tip{ 
width: 190px; 
border: 2px red solid; 
position: absolute; 
background-color: #fff; 
display: none; 
} 
.tip li{ 
line-height: 23px; 
}

接下来就是主要的jquery代码:menu.js
$(function(){ var curY;//获取所选想的TOP 
var curH;//获取所选的Height 
var curW;//获取所选的width 
var objL;//获取当前对象 
//自定义函数用于获取当前位置 
function setInitValue(obj){ 
curY=obj.offset().top; 
curH=obj.height(); 
curW=obj.width(); 
} 
//设置当前所选项的鼠标滑动事件 
$(".optn").mouseover(function(){ 
objL=$(this);//获取当前对象 
setInitValue(objL); 
var allY=curY-curH +"px"; 
objL.addClass("optnFocus"); 
//获取气元素下的下一个ul 
$(".tip",this).show().css({"top":allY,"left":curW});; 
}); 
$(".optn").mouseout(function(){ 
$(this).removeClass("optnFocus"); 
$(".tip",this).hide(); 
}); 
//为了防止移到子菜单时子菜单不见,我们也要为子菜单设置鼠标事件 
$(".tip").mouseover(function(){ 
$(this).show(); 
objL=$(this).prev("li"); 
setInitValue(objL); 
objL.addClass("optnFocus"); 
}); 
$(".tip").mouseout(function(){ 
$(this).hide(); 
$(this).prev("li").removeClass("optnFocus"); 
}); 
});

注意要点:

1.由于我们用的是较高版本的jquery文件库,所以有些方法是不支持的,例如获取下一个元素的第一个子元素next(erp),在10.1中是不支持的,所以我换了一种方法$(chiled,select),表示在select的范围进行元素的选择

2.整个效果的实现我们还要为子选项框绑定鼠标事件,目的就是为了不在我们移动到子选项卡中,突然消失。

要实现好看的效果就需要加一些图片和样式,不过原理是一样的哦

Javascript 相关文章推荐
javascript里的条件判断
Feb 27 Javascript
不要小看注释掉的JS 引起的安全问题
Dec 27 Javascript
为javascript添加String.Format方法
Aug 11 Javascript
js和jquery对dom节点的操作(创建/追加)
Apr 21 Javascript
js判断选择的时间是否大于今天的代码
Aug 20 Javascript
js实现的牛顿摆效果
Mar 31 Javascript
浅谈AngularJS中ng-class的使用方法
Nov 11 Javascript
最实用的JS数组函数整理
Dec 05 Javascript
基于axios 解决跨域cookie丢失的问题
Sep 26 Javascript
Vue动态组件与异步组件实例详解
Feb 23 Javascript
bootstrap table.js动态填充单元格数据的多种方法
Jul 18 Javascript
js制作提示框插件
Dec 24 Javascript
js获取视频时长代码
Apr 10 #Javascript
js转化毫秒为时间格式代码
Apr 10 #Javascript
jquery移除、绑定、触发元素事件使用示例详解
Apr 10 #Javascript
jquery序列化表单去除指定元素示例代码
Apr 10 #Javascript
jquery删除ID为sNews的tr元素的内容
Apr 10 #Javascript
javascript正则匹配汉字、数字、字母、下划线
Apr 10 #Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
Apr 10 #Javascript
You might like
mysql时区问题
2008/03/26 PHP
写出高质量的PHP程序
2012/02/04 PHP
smarty简单应用实例
2015/11/03 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
javascript时区函数介绍
2012/09/14 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
使用JavaScript触发过渡效果的方法
2017/01/19 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
Python实用日期时间处理方法汇总
2015/05/09 Python
python中字典(Dictionary)用法实例详解
2015/05/30 Python
Python实现单词翻译功能
2017/06/06 Python
详解Python文本操作相关模块
2017/06/22 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
python 二维数组90度旋转的方法
2019/01/28 Python
PyQt5响应回车事件的方法
2019/06/25 Python
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
大学总结自我鉴定
2014/01/18 职场文书
鸿星尔克广告词
2014/03/21 职场文书
软件项目开发计划书
2014/05/01 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
求职自我推荐信
2014/06/25 职场文书
国庆宣传标语
2014/06/30 职场文书
2014年预算员工作总结
2014/12/05 职场文书
JS实现数组去重的11种方法总结
2022/04/04 Javascript
基于Python编写一个监控CPU的应用系统
2022/06/25 Python