0

ブラウザがフォーカスされているかどうか、およびマウスが動いているかどうかに基づいて、呼び出された AJAX を停止するためのきちんとした方法を作成しようとしています。

ユーザーがブラウザーの別のタブに移動したり、ウィンドウを最小化したり、Web アプリ以外の場所に移動したりした場合、AJAX 呼び出しを 1 分で強制終了したいと考えています。ユーザーが Web アプリ内の任意の場所にマウスを移動すると、ユーザーがアプリに「集中」していると見なされ、ajax 呼び出しが続行されます。「タイムアウト」部分を処理するために「st」というタイムアウトをそこに入れましたが、マウス検出器を追加するのはもう少し高度です。ここに私が持っているものがあります:

var window_focus = true;
$(document).ready(function () {    

    $('#alertbox').click(function () {
        $('#alertbox').slideUp("slow");
    });

    // Check focal point
    $(window).focus(function () {
        if (window_focus) {
            return
        }
        window_focus = true;
        waitForMsg();

    }).blur(function () {
        if (!window_focus) {
            return
        }
        console.log('Init Suspension...');
        // Set Timeout
        $(function () {
            st = setTimeout(function () {
                clearTimeout(setTimeoutConst);
                window_focus = false;
                document.title = 'Timed Out | WEBSITE';
                console.log('Suspended');
            }, 60000);    
        });
    });

    waitForMsg();
});

私は次のようなものを追加しようとしていました:

$(function () {
    $().mousemove(function () {
        console.log('Reinitialize');
        clearTimeout(st);
        waitForMsg();
    });
});

しかし、うまくいきませんでした。ご協力いただきありがとうございます。

4

2 に答える 2

0

http://jsfiddle.net/popnoodles/5mqMm/

おそらくこれを使用して.one(). これにより、ウィンドウがリロードされるか別のページに移動するまで、マウスの動きが確認され、手順が実行され、再度実行されなくなります。

これをぼかしの中に入れるということは、ぼかしによって再び設定されることを意味します。

}).blur(function () {
    $(document).one('mousemove', function(){
       // i react ONCE to the mouse being moved
         console.log('Reinitialize');
         clearTimeout(st);
         waitForMsg();
         // focus the window again as desired
         $(window).trigger('focus');
    });
    if (!window_focus) {
        return
    }
    console.log('Init Suspension...');
    // Set Timeout
    $(function () {
        st = setTimeout(function () {
            clearTimeout(setTimeoutConst);
            window_focus = false;
            document.title = 'Timed Out | WEBSITE';
            console.log('Suspended');
        }, 60000);    
    });
});
于 2013-03-15T00:54:44.020 に答える
0

このjsfiddleを試してください

var window_focus = true, lastMouseMoveTime;
$(document).ready(function () {    
    lastMouseMoveTime = new Date().getTime();
    $('#alertbox').click(function () {
        $('#alertbox').slideUp("slow");
    });

    // Check focal point
    $(window).focus(function () {
        if (window_focus) {
            return
        }
        window_focus = true;
        waitForMsg();

    }).blur(function () {
        if (!window_focus) {
            return
        }
        window_focus = false;
        console.log('Init Suspension...');
        // Set Timeout
    });

    waitForMsg();
    $(document).mousemove(function(){
        lastMouseMoveTime = new Date().getTime();
        if(!window_focus ){
            waitForMsg(); // restarting ajax if it stopped because of mousemove.
        }

    });

});

あなたのajax呼び出し方法で

if( !window_focus){
     if( new Date().getTime() - lastMouseMoveTime   > 60*1000 ){
            return;
     }
}
于 2013-03-15T20:09:09.410 に答える