1

これは私のコードです:

$(".pc2").hover(function(){

        $('#pc1').show();
        $('#pc1a').show(800);
    },
    function(){
        $('#pc1').hide();
        setTimeout(function(){$('#pc1a').hide();}, 5000);
        $('#pc1a').mouseenter(function(){
        clearTimeout(function(){$('#pc1a').show();}); 
        });
        $('#pc1a').mouseleave(function(){
            $('#pc1a').hide(800);
        });
    });

私が望むのは、ユーザーがマウスをフロートさせてdivに入ると、 $('pc1a') divがそのままになることです( setTimeout( hide()) が呼び出されないようにするため)。これは、stop(); を使用して簡単に解決できるようです。、clearTimeout(); または clearQueue(); しかし、私の状況に基づいてこれらのメソッドを適切に呼び出す方法がわかりません。私にアドバイスして、解決策を見つけるのを手伝ってもらえますか?

前もって感謝します

4

2 に答える 2

3

clearTimeout関数ではなく、以前のタイマー ハンドルを受け入れます。の戻り値を保存し、setTimeout後でその値を使用してキャンセルします。

例えば:

$(".pc2").hover(
    function () {
        $('#pc1').show();
        $('#pc1a').show(800);
    },
    function () {
        var timer;

        $('#pc1').hide();
        timer = setTimeout(function () {     // <== Save it
            $('#pc1a').hide();
        }, 5000);
        $('#pc1a').mouseenter(function () {
            clearTimeout(timer);             // <== Cancel it
        });
        $('#pc1a').mouseleave(function () {
            $('#pc1a').hide(800);
        });
    }
);
于 2013-08-06T06:56:16.663 に答える
1

IDで呼び出す必要がありますclearTimeout、これを試してください(*更新)

$(".pc2").hover(function() {
        $('#pc1').show();
        $('#pc1a').show(800);
    },
    function() {
        var timeoutId;
        $('#pc1').hide();
        timeoutId = setTimeout(function(){$('#pc1a').hide();}, 5000);
        $('#pc1a').mouseenter(function(){
            clearTimeout(timeoutId); 
        });
        $('#pc1a').mouseleave(function(){
            $('#pc1a').hide(800);
        });
    }
);
于 2013-08-06T06:57:57.283 に答える