0

私は単純な jQuery パネル スライダーを作成しようとしていますが、基本的に必要な場所に 2 つの機能を差し引いたものにします。そのバージョンはhttp://jsfiddle.net/7WArj/で見ることができます。

現在、パネルはコンテンツの上を下にスライドし、閉じるボタンをクリックすると閉じます。最終的にボタンになる画像は、開いたときに上向きになり、閉じたときに下向きになるようにしたいので、ボタンが変わります。

パネルにカーソルを合わせていないときにタイムアウトになり、x 秒後に元に戻る機能を追加したいと思います。

また、スライド パネル以外の場所をクリックすると、パネルが上にスライドする機能も追加したいと考えています。

これを.toggle()andでいくつか.bind試しましたが、正しく機能させることができませんでした。メニューがランダムに上下にスライドするなど。

私のコードを書くためのより良い方法があれば、それは大歓迎です。

4

2 に答える 2

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"); 
    });
});

</p>

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;
}

</p>

HTML: 同上

于 2012-08-03T18:09:36.890 に答える
1

うまく動作しますが、マウスアウトではなく「ボタンダウン」で開いて閉じるのを待つと、問題が見つかりました=>問題ありません。

この時点で問題、「ボタンダウン」で再度開くと、すぐに閉じます。

よろしければ、mouseleave 中に閉じるための解決策を提案しているので、

$( "#toppanel" ).mouseleave(
function( event ){
    var container = $( "#panel" );
    if (container.is( ":visible" )){
    $('#panel').delay(1800).slideUp(300);}
});
于 2012-09-04T22:50:35.807 に答える