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 相关文章推荐
一些实用的jQuery代码片段收集
Jul 12 Javascript
Prototype源码浅析 Enumerable部分之each方法
Jan 16 Javascript
JavaScript检查子字符串是否在字符串中的方法
Feb 03 Javascript
JS组件Bootstrap Table布局详解
May 27 Javascript
Canvas 绘制粒子动画背景
Feb 15 Javascript
Vue项目中设置背景图片方法
Feb 21 Javascript
Vuex入门到上手教程
Jun 20 Javascript
Vuex 使用及简单实例(计数器)
Aug 29 Javascript
JS查找孩子节点简单示例
Jul 25 Javascript
koa中间件核心(koa-compose)源码解读分析
Jun 15 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
Jan 12 Vue.js
关于JavaScript轮播图的实现
Nov 20 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
967 个函式
2006/10/09 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
2012/11/07 PHP
php分页代码学习示例分享
2014/02/20 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
python实现百度关键词排名查询
2014/03/30 Python
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
初步理解Python进程的信号通讯
2015/04/09 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
python3 下载网络图片代码实例
2019/08/27 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
为世界各地的女性设计和生产时尚服装:ROMWE
2016/09/17 全球购物
C面试题
2015/10/08 面试题
机械专业毕业生推荐信范文
2013/11/25 职场文书
博士研究生自我鉴定范文
2013/12/04 职场文书
质量标语大全
2014/06/12 职场文书
2014年项目经理工作总结
2014/11/24 职场文书
销售工作决心书
2015/02/04 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
2021/06/18 MySQL