Posted in Javascript onDecember 25, 2008
/*弹出式菜单*/ //没剑 2008-07-03 //http://regedit.cnblogs.com /*参数说明*/ //showobj:要显示的菜单ID //timeout:延时时间,鼠标停留/离开后延时多久开始显示/隐藏菜单 //speed:菜单显示速度,数字越大,显示越慢,默认为100 //调用示例:$("#button").DMenu("#content"); jQuery.fn.DMenu=function(showobj,timeout,speed){ timeout=timeout?timeout:300; speed=speed?speed:100; //按钮对象 var button=$(this); //延时计数器 var timer=null; //隐藏的浮动层 var hideDiv=$("<div></div>"); //容器对象 var Container=$("<div id=\"Container\"></div>"); Container.hide(); hideDiv.append(Container); //菜单对象 var jqShowObj=$(showobj); //隐藏菜单 jqShowObj.hide(); //菜单显示的状态 var display=false; //按钮的offset var offset=button.offset(); //菜单区高 var height=jqShowObj.height(); //菜单区宽 var width=jqShowObj.width(); //按钮的高 var btnHeight=button.height(); //按钮的宽 var btnWidth=button.width(); //定位层放到最前面 $(document.body).prepend(hideDiv); //放到容器中 //Container.append(jqShowObj); //****显示菜单方法开始****// var showMenu=function(){ //如果菜单为显示则退出操作 if (display) { return false; } //设置容器属性 Container.css({ margin:"0 auto", width:btnWidth+"px", height:btnHeight+"px" }); //定位隐藏层 hideDiv.css({ position:"absolute", top:offset.top+"px", left:offset.left+(btnWidth/2)-(width/2)+"px", height:height+"px", width:width+"px" }).show(); //给容器加个黑边框 Container.css({ border:"1px solid #666666" }); //显示定位层 //高宽慢慢增大 Container.animate({ marginTop:btnHeight+4, height:height+4, width:width+4, opacity:'100'},speed,function(){ //动画结束时 start// //显示菜单 jqShowObj.show(); //添加菜单入容器 Container.append(jqShowObj); //去除边框 Container.css({ border:"0px" }); //显示状态置为true display=true; //鼠标移入 jqShowObj.mouseover(function(){ clearTimeout(timer); }); //鼠标移开 jqShowObj.mouseout(function(){ hideMenu(); }); //动画结束时 end// }); }; //****显示菜单方法结束****// //****隐藏菜单方法开始****// var hideMenu=function(){ clearTimeout(timer); //延时隐藏菜单 timer=setTimeout(function(){ //显示边框 Container.css({ border:"1px solid #666666" }); //清空容器 Container.empty(); //收缩容器 Container.animate({ width:btnWidth,height:btnHeight,marginTop:'0', opacity: '0' }, speed,function(){ //动画结束时 start// //隐藏容器 Container.hide(); //定位层隐藏 hideDiv.hide(); //显示状态置为false display=false; //动画结束时 end// }); }, timeout); }; //****隐藏菜单方法结束****// //绑定按钮鼠标经过事件 button.hover(function(e){ //延时显示菜单 clearTimeout(timer); timer=setTimeout(function(){ showMenu(); }, timeout); },function(){ clearTimeout(timer); //鼠标离开按钮时,如果菜单还是显示状态则隐藏 if(display){ timer=setTimeout(function(){ hideMenu(); },timeout); } }); };
注:对于select挡住弹出菜单的问题,因为与插件没有关系,所以在此,偶没有解决,放哪个select在哪只是想提醒大家使用弹出菜单时要注意到这个问题,具体的解决方法可以自动搜索,或者在排版上作调整。
文件打包下载
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@