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的文字自动截取(提供源代码)
Aug 09 Javascript
30个精美的jQuery幻灯片效果插件和教程
Aug 23 Javascript
ko knockoutjs动态属性绑定技巧应用
Nov 14 Javascript
angularJS结合canvas画图例子
Feb 09 Javascript
为何JS操作的href都是javascript:void(0);呢
Nov 12 Javascript
Angular实现form自动布局
Jan 28 Javascript
Express + Node.js实现登录拦截器的实例代码
Jul 01 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
Aug 25 Javascript
echarts多条折线图动态分层的实现方法
May 24 Javascript
layui监听select变化,以及设置radio选中的方法
Sep 24 Javascript
谈谈node.js中的模块系统
Sep 01 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
Sep 02 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
PHP 文件扩展名 获取函数
2009/06/03 PHP
php中用foreach来操作数组的代码
2011/07/17 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
js模拟弹出效果代码修正版
2008/08/07 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
hammer.js实现图片手势放大效果
2017/08/29 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
python处理圆角图片、圆形图片的例子
2014/04/25 Python
Python读写Excel文件方法介绍
2014/11/22 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
PyQt5实现下载进度条效果
2018/04/19 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
Python PIL图片添加字体的例子
2019/08/22 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
阿里云:Aliyun.com
2017/02/15 全球购物
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
毕业生的自我评价
2013/12/30 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
python通过新建环境安装tfx的问题
2022/05/20 Python
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript