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

/*弹出式菜单*/
//没剑 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);
        }
    });
};

DEMO下载地址

注:对于select挡住弹出菜单的问题,因为与插件没有关系,所以在此,偶没有解决,放哪个select在哪只是想提醒大家使用弹出菜单时要注意到这个问题,具体的解决方法可以自动搜索,或者在排版上作调整。
posted @ 2008-07-02 22:51 没剑 阅读(1510) 评论(7)  编辑 收藏 网摘 所属分类: .net生涯JQuery

  回复  引用  查看    
#1楼2008-07-03 08:41 | Wesley Jiang      
赞~
FF3下有问题,鼠标移到“偶是按钮”左右两侧水平位置弹出层并没有随之消失,IE7下ok的.

  回复  引用    
#2楼2008-07-03 09:39 | gyf19[未注册用户]
在IE6 不正常, 选择框还显示!
  回复  引用  查看    
#3楼[楼主]2008-07-03 17:57 | 没剑      
ie6的bug还是有的,我这里不针对这对问题而写进插件里,请见谅哦
有关select bug的问题可自已去搜索"select bug iframe"

  回复  引用  查看    
#4楼[楼主]2008-07-03 18:00 | 没剑      
--引用--------------------------------------------------
Wesley Jiang: 赞~
FF3下有问题,鼠标移到“偶是按钮”左右两侧水平位置弹出层并没有随之消失,IE7下ok的.
--------------------------------------------------------
Wesley Jiang:因为偶现在用的是ff2所以暂没有环境来测试ff3下的问题,晚上在家再装个ff3测试一下吧,谢谢你的建议!

  回复  引用    
#5楼2008-07-18 09:36 | ianglianga[未注册用户]
不错的东西!有时间转载一下!!
  回复  引用    
#6楼2008-08-19 15:45 | long2008[未注册用户]
<head>
<title>分红网</title>
<script type="text/javascript" src="/mall/js/jquery2.js"></script>
<script type="text/javascript" src="/mall/js/jquery.DMenu.js'"></script>
<script type="text/javascript">
//jQuery(document).ready(function(){
jQuery(function(){
jQuery("#button").DMenu("#content");
});
//})
</script>
<span jwcid="validationError" />
</head>
<body onLoad="document.body.focus()">
<div id="button"><a href="#" id="bb">偶是按钮</a></div><br/><select><option>偶是万恶的选择器</option></select>
<!-- 悬浮层开始 -->
<div id="content">
sssssssssssssssddddddddd
</div>
使用次插件时,提示“对象不支持次属性或方法”是什么原因?

  回复  引用    
#7楼2008-10-01 12:07 | jquery[未注册用户]
菜单显示时 $("select").hide();
菜单隐藏时$("select").show();这样选择框就不会显示了




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1234340




相关文章:

相关链接: