效果图及代码如下:
jQuery.subMenu.js:
/*******动态下拉菜单*******
subMenu v1.0 -- 方便的导航菜单
------没剑(2008-1-17)------
$Date:2008年1月18日16:07:46
********动态下拉菜单******/
(function($){
$.fn.extend({
submenu:function(opt,callback){
if(this==null)return false;
//参数初始化
if(!opt) var opt={};
var _this=$(this);
var _This=_this.get(0);
var submenu=this;
/*参数定义*/
this.oneSmOnly=opt.oneSmOnly!=null?opt.oneSmOnly:false //单独拉开收起,如果是true的话,当前菜单只有一个展开项,默认为false
,this.speed=opt.speed!=null?opt.speed:'300' //数字越大,速度越慢,默认为300
,this.expandNum=opt.expandNum!=null?opt.expandNum:1 //设置初始化时菜单展开的项,默认为第一项
,this.savestatus=opt.savestatus!=null?opt.savestatus:true //设置是否保存菜单展开状态,默认为保存
,this.aHeight=25 //菜单项的默认高度
,isFirst=true; //是否为第一次加载(没有cookie的情况下)
_this.addClass("submenu");//增加CSS
if($.browser.msie && $.browser.version=="6.0"){
//假如是ie6.0的浏览器,则为第一个菜单加上first-child类,因为ie6下不认first-child
_this.find("div").eq(0).addClass("first-child");
}
if (submenu.savestatus)//如果选择了保存cookie状态,则去读菜单状态
{
var menuCookie=null;
menuCookie=$.cookie("subMenu_" + encodeURIComponent(_This.id)+"_menuStatus");
if (menuCookie!=null && menuCookie.length>0) {
var states = menuCookie.split("");
isFirst=false;
_this.find("div").each(function(i){
if (i>states.length)
return false;
if (states[i] == "0")
{
$(this).addClass("collapsed");
}
});
}
}else{
//清空缓存
$.cookie("subMenu_" + encodeURIComponent(_This.id)+"_menuStatus",null);
}
//取得一个A的高度
_this.find("div > a").eq(0).each(function(){
submenu.aHeight=this.offsetHeight;
return false;
});//取得一个链接的高度
_this.find("div").each(function(i){
var div=$(this);
if (isFirst && i!=submenu.expandNum-1)//如果是第一次打开菜单,则显示默认展开的项
{
div.addClass("collapsed");
}
//绑定事件:标题点击时
$(div).find("span").eq(0).mouseup(function(e){
var ParentDiv=$(this).parent();
if (ParentDiv.attr("class")=="collapsed" || ParentDiv.attr("class")=="first-child collapsed"){//状态为隐藏时
collapseOthers();//隐藏其它已展开的菜单
var menuCount=0;//子菜单的数量,这个决定父层要展开多大
menuCount=ParentDiv.find("a").length;
ParentDiv.animate({height: ((menuCount * submenu.aHeight)+this.offsetHeight)},submenu.speed);
ParentDiv.removeClass("collapsed");
}else{
collapseOthers(ParentDiv);
ParentDiv.animate({height: 25},submenu.speed);
ParentDiv.addClass("collapsed");
}
writeCookie();
});
});
//把除展开的菜单外的其它展开的菜单合上
collapseOthers = function(me){
if(submenu.oneSmOnly==false)return;
_this.find("div").not($(me)).not(".collapsed,first-child collapsed").each(function(){
$(this).animate({height: 25},submenu.speed);
$(this).addClass("collapsed");
})
};
//记录菜单状态
writeCookie = function(){
//如果要保存cookie的话
if (submenu.savestatus=="false"){
//清空缓存
if($.cookie("subMenu_" + encodeURIComponent(_This.id)+"_menuStatus")!=null)$.cookie("subMenu_" + encodeURIComponent(_This.id)+"_menuStatus",null);
return;
}
var states = new Array();
_this.find("div").each(function(i){
states.push($(this).attr("class")== "collapsed" ? 0 : 1);
});
var d = new Date();
d.setTime(d.getTime() + (30 * 24 * 60 * 60 * 1000));
$.cookie("subMenu_" + encodeURIComponent(_This.id)+"_menuStatus",states.join(""),{expires: d});
};
//展开所有菜单项
this.expandAll=function(){
_this.find("div.collapsed").each(function(){
var menuCount=0;//子菜单的数量,这个决定父层要展开多大
menuCount=$(this).find("a").length;
$(this).animate({height: (menuCount*submenu.aHeight)+this.offsetHeight},submenu.speed);
$(this).removeClass("collapsed");
});
};
//收起所有菜单项
this.collapseAll=function(){
_this.find("div").not(".collapsed").each(function(){
var menuCount=0;//子菜单的数量,这个决定父层要展开多大
menuCount=$(this).find("a").length;
$(this).animate({height: 25},submenu.speed);
$(this).addClass("collapsed");
});
};
return this;
}
})
})(jQuery);
jquery.cookies.js:
jQuery.cookie = function(name, value, options) {
if (typeof value != 'undefined') { // name and value given, set cookie
options = options || {};
if (value === null) {
value = '';
options.expires = -1;
}
var expires = '';
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
var date;
if (typeof options.expires == 'number') {
date = new Date();
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
} else {
date = options.expires;
}
expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
}
var path = options.path ? '; path=' + options.path : '';
var domain = options.domain ? '; domain=' + options.domain : '';
var secure = options.secure ? '; secure' : '';
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
} else { // only name given, get cookie
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
};
main.css:
.lists {
height:84px;
margin:0 auto;
padding:0 0 10px;
position:relative;
width:730px;
}
.google-list {
display:inline;
float:left;
height:82px;
margin:0 145px 0 53px;
overflow:hidden;
padding:0;
position:relative;
width:600px;
}
.google-list ul {
margin:0;
overflow:hidden;
padding:14px 0 0;
position:absolute;
}
.google-list li {
float:left;
font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;
font-size:10px;
font-weight:bold;
line-height:12px;
list-style:none;
padding:0 0 30px 17px;
width:82px;
}
.google-list li a {
color:#6C93C5;
float:left;
text-decoration:none;
}
.google-list li a:hover {
text-decoration:underline;
}
.google-list li a .imgcont {
height:43px;
overflow:hidden;
}
.google-list li a .img {
display:block;
margin:0 auto;
padding:0;
height:41px;
width:80px;
border:1px solid #D9D9D9;
cursor:pointer;
background:#FFFFFF none repeat scroll 0 0;
}
.google-list li a span {
display:block;
padding:1px 0 0 1px;
text-align:center;
}
a.button-left {
background-image:url(c-google-arrows.gif);
background-position:0 0;
height:44px;
left:24px;
overflow:hidden;
position:absolute;
text-indent:-9999px;
top:18px;
width:28px;
}
a.button-right {
background-image:url(c-google-arrows.gif);
background-position:-28px 0;
height:44px;
overflow:hidden;
position:absolute;
right:40px;
text-indent:-9999px;
top:18px;
width:28px;
}