setTimeout 재설정


161

나는 다음을 가지고있다 :

window.setTimeout(function() {
    window.location.href = 'file.php';
}, 115000);

.click 기능을 통해 카운트 다운 도중에 카운터를 재설정하는 방법은 무엇입니까?


기존 디 바운스 구현을 사용할 수 있습니다.
AturSams

답변:


264

해당 시간 초과에 대한 참조를 저장 한 다음 clearTimeout해당 참조 를 호출 할 수 있습니다 .

// in the example above, assign the result
var timeoutHandle = window.setTimeout(...);

// in your click function, call clearTimeout
window.clearTimeout(timeoutHandle);

// then call setTimeout again to reset the timer
timeoutHandle = window.setTimeout(...);

2
너무 .clear()시간이 오래 걸리는 객체 자체 가 없다는 것이 이상 합니다.
Automatico

16
@ Cort3z window.setTimeout는 "timeout 객체"가 아닌 숫자 (타이머의 ID)를 반환 하기 때문 입니다.
Dan O

2
예 @DanO : setTimeout이 Timeout 객체를 반환하지 않는 것이 이상합니다. NodeJS 컨텍스트에서 수행합니다.
Ki Jéy

25

clearTimeout () 및 setTimeout의 참조를 제공합니다 (숫자). 그런 다음 다시 호출하십시오.

var initial;

function invocation() {
    alert('invoked')
    initial = window.setTimeout( 
    function() {
        document.body.style.backgroundColor = 'black'
    }, 5000);
}

invocation();

document.body.onclick = function() {
    alert('stopped')
    clearTimeout( initial )
    // re-invoke invocation()
}

이 예에서 5 초 안에 body 요소를 클릭하지 않으면 배경색이 검은 색이됩니다.

참고:

참고 : setTimeout 및 clearTimeout은 ECMAScript 기본 메소드가 아니라 글로벌 창 네임 스페이스의 Javascript 메소드입니다.


9

타임 아웃 "타이머"를 기억하고 취소 한 다음 다시 시작해야합니다.

g_timer = null;

$(document).ready(function() {
    startTimer();
});

function startTimer() {
    g_timer = window.setTimeout(function() {
        window.location.href = 'file.php';
    }, 115000);
}

function onClick() {
    clearTimeout(g_timer);
    startTimer();
}

1
이 옵션이 무시되었다는 점이 흥미 롭습니다. 다른 것들은 타이머 내부 기능을 복제하는 것을 필요로하는 것으로 보인다. 이것은 두 줄을 유지하기 위해 몇 줄 이상의 코드가 있다면 건조하고 고통스럽지
않다

8
var myTimer = setTimeout(..., 115000);
something.click(function () {
    clearTimeout(myTimer);
    myTimer = setTimeout(..., 115000);
}); 

그 라인을 따라 뭔가!


2

이 타이머는 30 초 후에 "Hello"경고 상자를 시작합니다. 그러나 타이머 재설정 버튼을 클릭 할 때마다 timerHandle이 지워지고 다시 재설정됩니다. 일단 발사되면 게임이 종료됩니다.

<script type="text/javascript">
    var timerHandle = setTimeout("alert('Hello')",3000);
    function resetTimer() {
        window.clearTimeout(timerHandle);
        timerHandle = setTimeout("alert('Hello')",3000);
    }
</script>

<body>
    <button onclick="resetTimer()">Reset Timer</button>
</body>

2
var redirectionDelay;
function startRedirectionDelay(){
    redirectionDelay = setTimeout(redirect, 115000);
}
function resetRedirectionDelay(){
    clearTimeout(redirectionDelay);
}

function redirect(){
    location.href = 'file.php';
}

// in your click >> fire those
resetRedirectionDelay();
startRedirectionDelay();

다음은 http://jsfiddle.net/ppjrnd2L/ 에서 실제로 진행중인 작업에 대한 자세한 예입니다.


1
$(function() {

    (function(){

        var pthis = this;
        this.mseg = 115000;
        this.href = 'file.php'

        this.setTimer = function() { 
            return (window.setTimeout( function() {window.location.href = this.href;}, this.mseg));
        };
        this.timer = pthis.setTimer();

        this.clear = function(ref) { clearTimeout(ref.timer); ref.setTimer(); };
        $(window.document).click( function(){pthis.clear.apply(pthis, [pthis])} );

    })();

});

1

타이머를 재설정하려면 타이머 변수를 설정하고 지워야합니다.

$time_out_handle = 0;
window.clearTimeout($time_out_handle);
$time_out_handle = window.setTimeout( function(){---}, 60000 );

25
아아, 나는 자바 스크립트에서 PHP 스타일 변수 이름을 사용하지 않는 것이 좋습니다. 그렇습니다, 그것은 효과가 있지만, 나의 하나님, 그것은 혼란 스럽습니다.
psynnott

0

나는 이것이 오래된 실이라는 것을 알고 있지만 오늘 이것을 생각해 냈습니다.

var timer       = []; //creates a empty array called timer to store timer instances
var afterTimer = function(timerName, interval, callback){
    window.clearTimeout(timer[timerName]); //clear the named timer if exists
    timer[timerName] = window.setTimeout(function(){ //creates a new named timer 
        callback(); //executes your callback code after timer finished
    },interval); //sets the timer timer
}

그리고 당신은 사용하여 호출

afterTimer('<timername>string', <interval in milliseconds>int, function(){
   your code here
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.