Тайм-аут функции в JavaScript / jQuery - PullRequest
0 голосов
/ 27 октября 2010

У меня следующая проблема:

Я использую Карты Google на своем сайте. Я прикрепил следующий EventListener к самой карте:

google.maps.event.addListener(map, 'bounds_changed', scheduleDelayedCallback);

Событие bounds_changed вызывается каждый раз, когда кто-то перетаскивает карту. Моя проблема в том, что он вызывается несколько раз в процессе перетаскивания. Теперь мне нужно найти способ вызывать только функцию обратного вызова, если она не вызывалась в течение, скажем, 750 миллисекунд.

Я сделал это с помощью этих двух функций:

function fireIfLastEvent() {
    var now = new Date().getTime();
    if (lastEvent.getTime() + 750 <= now) {
        this_function_needs_to_be_delayed();
    } else {
        $("#main").html('Lade...');
    }
}

function scheduleDelayedCallback() {
    lastEvent = new Date();
    setTimeout(fireIfLastEvent, 750);
}

Этот метод прекрасно работает в Chrome и Opera. В IE он иногда работает, в Firefox он никогда не работает (он вызывает функции, даже если прошло 750 миллисекунд).

Есть ли надежный способ тайм-аута вызова функции?

Спасибо.

1 Ответ

0 голосов
/ 27 октября 2010

Тебе не нужен тайм-аут здесь.

function scheduleDelayedCallback() { 

    var now = new Date();

    if (now.getTime() - lastEvent.getTime() >= 750) {
        // minimum time has passed, go ahead and update or whatever
        $("#main").html('Lade...'); 
        // reset your reference time
        lastEvent = now;
    }
    else {
        this_function_needs_to_be_delayed(); // don't know what this is.
    }
} 

Ваше объяснение того, что вы хотите случиться, не самое ясное, поэтому дайте мне знать, если поток неправильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...