Выполнение функции по-разному в зависимости от того, когда она была запущена в первый раз

#javascript

#javascript

Вопрос:

Я хочу, чтобы фрагмент кода выполнялся только в том случае, если он выполняется в течение 6 секунд после первого запуска.

Я думал о том, чтобы сделать это так:

 var withinSix = false;
function onDeleteKeyUp(){
    withinSix = true;
    if(withinSix){
        //interaction code here
        setTimeout(function(){
            withinSix = false;
        }, 6000);
     }
});
  

Есть ли лучший способ сделать это?

Ответ №1:

В качестве альтернативы, без использования таймеров, просто отслеживайте, когда она вызывается впервые:

 var called = -1;

function onDeleteKeyUp(){

    // Track the current time on the first call. (in ms)
    if (called === -1){
        called = (new Date()).getTime();
    }

    // Compare the current time to the time of the first call. (6s = 6000ms)
    if ((new Date()).getTime() - called < 6000){
        // Within 6 seconds...

    } else {
        // After 6 seconds...

    }
}
  

Комментарии:

1. 1 Мне нравится это решение больше, потому что на самом деле оно даже добрее в противостоянии с браузером. Я не буду занимать ненужные ресурсы, запуская тайм-аут в фоновом режиме.

Ответ №2:

Да, вы можете запустить таймер при загрузке страницы, а затем сделать что-то через шесть секунд:

 var withinSix = true;   // By default, the click happened within six seconds
setTimeout(function() { // Start a timer that will fire after six seconds
    withinSix = false;  // The timer fired, clear the flag
}, 6000);               // 6000ms = 6 seconds
function onDeleteKeyUp(){
    if(withinSix){      // Was it before the timer fired?
        // Yes, it happened within 6 seconds of when this code started
    }
});
  

Теперь, когда вы запускаете таймер, зависит от вас. Приведенный выше код запускает ее сразу после запуска кода. Это было бы наиболее уместно, если код находится в script элементе в самом конце body (непосредственно перед закрывающим </body> тегом), что является наилучшей практикой. Но вы захотите запускать таймер всякий раз, когда это подходит для вашего варианта использования.