1

私がやろうとしているのは、ページが読み込まれると 3 秒後にボックスが表示され、何も起こらない場合は 3 秒後に部分的に非表示になることです。カーソルがボックスに入ると、タイムアウトがクリアされ、タイムアウトをクリアしているため、広告が非表示になることはありません。

問題は、マウスが離れて再び入るときに、以前のタイムアウトがまだ残っていることです。タイムアウトをクリアしようとしていますが、それでもボックスが非表示になります。何が問題になる可能性がありますか?

私のコードを参照してください: (JSfiddle リンク: http://jsfiddle.net/aK9nB/ )

var pstimer;

$(document).ready(function(){
    setTimeout(function(){
        showps();
        pstimer = setTimeout(function() {
                hideps();
        }, 3000);
    }, 3000);
});

$('#psclose').on('click', function(){
    $('#postsearch-container').hide();
});

$("#postsearch-container").hover(
    function () {
        console.log("enter");
        clearTimeout(pstimer);
        console.log("cleartimeout");
        showps();
    }, 
    function () {   
        console.log("leave");
        clearTimeout(pstimer);
        var pstimer = setTimeout(function(){
            hideps();
    } , 3000);
});

function showps() { 
    $("#postsearch-container").stop();
    $('#postsearch-container').animate({
        bottom: '0'
    }, 'slow');
}

function hideps() {
    $('#postsearch-container').animate({
        bottom: '-115'
    }, 'slow');
}
4

2 に答える 2

2
$("#postsearch-container").hover(
    function () {
        console.log("enter");
        clearTimeout(pstimer);
        console.log("cleartimeout");
        showps();
    }, 
    function () {   
        console.log("leave");
        clearTimeout(pstimer);
        pstimer = setTimeout(function(){ // remove the "var" 
            hideps();
        } , 3000);
    }
);
于 2012-12-17T17:57:39.310 に答える
2

ptimerの前にある変数を削除してみてください。

    function () {   
        console.log("leave");
        clearTimeout(pstimer);
        /* var */ pstimer = setTimeout(function(){
            hideps();
        } , 3000);
    }

var を使用すると、目的の ptimer と名前を共有する新しいローカル変数が定義されますが、この関数呼び出し内でのみ使用できます。関数が完了すると、ローカル変数は破棄されます。

于 2012-12-17T18:01:12.107 に答える