Đặt lại setTimeout


159

Tôi có những điều sau đây:

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

Làm thế nào tôi có thể, thông qua chức năng .click, đặt lại bộ đếm giữa chừng trong quá trình đếm ngược?


Bạn có thể có thể sử dụng một thực hiện gỡ lỗi hiện có.
AturSams

Câu trả lời:


260

Bạn có thể lưu trữ một tham chiếu đến thời gian chờ đó, và sau đó gọi clearTimeouttham chiếu đó.

// 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
Thật kỳ lạ khi không có một .clear()đối tượng hết thời gian chờ.
Automatico

16
@ Cort3z đó là vì window.setTimeouttrả về một số (ID bộ đếm thời gian) chứ không phải là "đối tượng hết thời gian".
Dan O

2
Có @DanO: lạ là setTimeout không trả về đối tượng Hết giờ. Trong bối cảnh NodeJS, nó làm.
Ki Jéy

25

clearTimeout () và cung cấp tham chiếu của setTimeout, đây sẽ là một số. Sau đó gọi lại nó:

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()
}

Trong ví dụ này, nếu bạn không nhấp vào phần tử cơ thể trong 5 giây, màu nền sẽ là màu đen.

Tài liệu tham khảo:

Lưu ý: setTimeout và clearTimeout không phải là phương thức gốc ECMAScript, mà là phương thức Javascript của không gian tên cửa sổ toàn cầu.


9

Bạn sẽ phải nhớ thời gian chờ "Hẹn giờ", hủy nó, sau đó khởi động lại:

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
Điều thú vị là tùy chọn này đã bị bỏ qua. Những người khác tất cả dường như đòi hỏi chức năng hẹn giờ nội bộ để được nhân đôi, đó là ít hơn khô và đau đớn nếu có nhiều hơn một vài dòng mã để duy trì hai lần ...
brianlmerritt

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

Một cái gì đó dọc theo những dòng!


2

Đồng hồ bấm giờ này sẽ kích hoạt hộp thông báo "Xin chào" sau 30 giây. Tuy nhiên, mỗi khi bạn nhấp vào nút hẹn giờ đặt lại, nó sẽ xóa bộ đếm thời gian và sau đó thiết lập lại. Khi nó bắn, trò chơi kết thúc.

<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();

đây là một ví dụ chi tiết cho những gì thực sự đang diễn ra 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

Để đặt lại bộ hẹn giờ, bạn sẽ cần đặt và xóa biến hẹn giờ

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

25
Argh, tôi khuyên bạn không nên sử dụng tên biến kiểu php trong javascript. vâng, nó sẽ hoạt động, nhưng Chúa ơi, nó thật khó hiểu.
psynnott

0

tôi biết đây là một chủ đề cũ nhưng tôi đã đưa ra nó ngày hôm nay

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
}

và bạn gọi bằng cách sử dụng

afterTimer('<timername>string', <interval in milliseconds>int, function(){
   your code here
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.