带有鼠标输出和关闭点击的jQuery幻灯片面板

时间:2012-08-03 17:54:50

标签: jquery jquery-animate toggle panel

我正在尝试制作一个简单的jQuery面板滑块,并将它基本上放在我想要它减去两个功能的位置。您可以在http://jsfiddle.net/7WArj/

查看其版本

目前,面板向下滑动内容,并在单击关闭按钮时关闭。按钮发生变化是因为我想要的图像最终会在关闭时打开和关闭时指向按钮。

我希望添加一项功能,当您不再悬停在面板上时,它会超时并在x秒后重新滑回。

我还想添加一些功能,如果您点击滑动面板上的任何位置,它也会触发面板向上滑动。

我尝试使用.toggle().bind进行了部分操作,但无法使其正常工作。菜单会随机上下滑动等等。

如果有更好的方法来编写我的代码,我们将非常感激。

2 个答案:

答案 0 :(得分:2)

我很确定这就是你想要的,代码用我所做的评论:

演示:http://jsfiddle.net/SO_AMK/jhYWk/

jQuery的:

jQuery(document).ready(function() {
    jQuery("div#toppanel").attr('tabindex', -1); //Let the DIV have focus

    jQuery("div#toppanel").blur(function(){
        jQuery("div#panel").animate({height: "0px"}, "fast"); // On blur, hide it
    });

    timerRunning = false;
    jQuery("div#panel").hover(function(){ //on mouse over clear a timeout if it exists
        if (timerRunning) {
            clearTimeout(hoverTimeout);
            timerRunning = false;
        }
    },
    function(){ //on mouse out set the timeout
        hoverTimeout = setTimeout(function(){
            jQuery("div#panel").animate({height: "0px"}, "fast");
        }, 2000);
        timerRunning = true;
    });

    jQuery('#toppanel').click(function(event){
         event.stopPropagation();
     });

    jQuery("div.panel_button").click(function(){
        jQuery("div#panel").focus().animate({ height: "250px" }, "fast");
        jQuery("div.panel_button").toggle()
    }); 

    jQuery("div#hide_button").click(function(){
        jQuery("div#panel").animate({height: "0px"}, "fast"); 
    });
});

CSS:

#toppanel {
    outline: 0; /* Remove yellow outline in Chrome */
    z-index: 25;
    text-align: center;
    position: absolute;
    top: 0px;
    left: 0px;
}
#panel {
    position: relative;
    height: 0px;
    margin-left: auto;
    margin-right: auto;
    z-index: 10;
    overflow: hidden;
    text-align: left;
    height: 0px;
    display: block;
    background-color: #efefef;
    border: 1px solid #000;
    width: 150px;
}
#panel_contents {
    height: 100%;
    width: 603px;
    position: absolute;
    z-index: -1;
}
.the_content {
    margin-top:40px;
}

HTML:相同

答案 1 :(得分:1)

它运作良好但我发现了一个问题,如果你用“按下按钮”而不是鼠标按钮打开它并等待它关闭=>细

此时出现问题,如果再次打开“按下按钮”,它会立即关闭。

如果可以的话,我建议一个解决方案,以便在mouseleave关闭时关闭

$( "#toppanel" ).mouseleave(
function( event ){
    var container = $( "#panel" );
    if (container.is( ":visible" )){
    $('#panel').delay(1800).slideUp(300);}
});