jquery 插件之仿“卓越亚马逊”首页弹出菜单效果


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在哪只是想提醒大家使用弹出菜单时要注意到这个问题,具体的解决方法可以自动搜索,或者在排版上作调整。
文件打包下载
Javascript 相关文章推荐
showModelessDialog()使用详解
Sep 07 Javascript
json格式化/压缩工具 Chrome插件扩展版
May 25 Javascript
js中将HTMLCollection/NodeList/伪数组转换成数组的代码
Jul 31 Javascript
namespace.js Javascript的命名空间库
Oct 11 Javascript
javascript中关于break,continue的特殊用法与介绍
May 24 Javascript
js动态创建、删除表格示例代码
Aug 07 Javascript
AngularJS入门教程之过滤器用法示例
Nov 02 Javascript
js实现炫酷的左右轮播图
Jan 18 Javascript
vue.js实现刷新当前页面的方法教程
Jul 05 Javascript
vue.js单文件组件中非父子组件的传值实例
Sep 13 Javascript
vue项目前端错误收集之sentry教程详解
May 27 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 Javascript
ASP SQL防注入的方法
Dec 25 #Javascript
jQuery 位置插件
Dec 25 #Javascript
jQuery 浮动广告实现代码
Dec 25 #Javascript
jQuery 操作XML入门
Dec 25 #Javascript
jQuery 动画基础教程
Dec 25 #Javascript
javascript jQuery插件练习
Dec 24 #Javascript
javascript 动态数据下的锚点错位问题解决方法
Dec 24 #Javascript
You might like
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
使用JS实现动态时钟
2020/03/12 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
详解Python if-elif-else知识点
2018/06/11 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
python中时间模块的基本使用教程
2019/05/14 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
如何使用Python调整图像大小
2020/09/26 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
木马的传播途径主要有哪些
2016/04/08 面试题
护士个人简历自荐信
2013/10/18 职场文书
本科毕业生的求职信范文
2013/11/20 职场文书
企划专员岗位职责
2013/12/09 职场文书
教师敬业奉献模范事迹材料
2014/05/18 职场文书
2015年三万活动总结
2015/03/25 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书
gateway网关接口请求的校验方式
2021/07/15 Java/Android
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android