#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>
тегом), что является наилучшей практикой. Но вы захотите запускать таймер всякий раз, когда это подходит для вашего варианта использования.