Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
900
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
952
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
942
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1727
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6088
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4400
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Выполнение скрипта после определенной задержки с помощью JavaScript
Существует ли какой-либо метод JavaScript, подобный jQuery delay() или wait() (чтобы задержать выполнение скрипта на определенное время)?
Просто чтобы добавить к тому, что все остальные говорили о setTimeout :
Если вы хотите вызвать функцию с параметром в будущем, вам нужно настроить некоторые анонимные вызовы функций.
Вам нужно передать функцию в качестве аргумента, чтобы она была вызвана позже. По сути, это означает, что без скобок за именем. Следующий вызовет оповещение сразу же, и оно отобразит 'Hello world':
var a = "world";
setTimeout(alert("Hello " + a), 2000);
Чтобы исправить это, вы можете либо ввести имя функции (как это сделал Flubba), либо использовать анонимную функцию. Если вам нужно передать параметр, то вы должны использовать анонимную функцию.
var a = "world";
setTimeout(function(){alert("Hello " + a)}, 2000);
a = "Stack Overflow";
Но если вы запустите этот код, вы заметите, что через 2 секунды всплывающее окно скажет "Привет переполнение стека". Это происходит потому, что значение переменной a изменилось за эти две секунды. Чтобы заставить его произнести 'Hello world' через две секунды, вам нужно использовать следующий фрагмент кода:
function callback(a){
return function(){
alert("Hello " + a);
}
}
var a = "world";
setTimeout(callback(a), 2000);
a = "Stack Overflow";
Он будет ждать 2 секунды, а затем всплывающее окно 'Hello world'.
Существует следующее:
setTimeout(function, milliseconds);
функция, которая может быть передана время, после которого функция будет выполнена.
Смотрите: Метод Window setTimeout() .
Просто чтобы немного расшириться... Вы можете выполнить код непосредственно в вызове setTimeout ,но, как говорит @patrick , вы обычно назначаете функцию обратного вызова, как это. Время в миллисекундах
setTimeout(func, 4000);
function func() {
alert('Do stuff here');
}
Если вы действительно хотите иметь блокирующую (синхронную) функцию delay (для чего бы то ни было), почему бы не сделать что-то вроде этого:
<script type="text/javascript">
function delay(ms) {
var cur_d = new Date();
var cur_ticks = cur_d.getTime();
var ms_passed = 0;
while(ms_passed < ms) {
var d = new Date(); // Possible memory leak?
var ticks = d.getTime();
ms_passed = ticks - cur_ticks;
// d = null; // Prevent memory leak?
}
}
alert("2 sec delay")
delay(2000);
alert("done ... 500 ms delay")
delay(500);
alert("done");
</script>
Вам нужно использовать setTimeout и передать ему функцию обратного вызова. Причина, по которой вы не можете использовать sleep в javascript, заключается в том, что вы блокируете всю страницу, чтобы ничего не делать в это время. Не очень хороший план. Используйте модель событий Javascript и будьте счастливы. Не сопротивляйся этому!
Вы также можете использовать window.setInterval() для повторного выполнения некоторого кода с регулярным интервалом.
В дополнение к предыдущим замечаниям я хотел бы сказать следующее :
Функция setTimeout() в JavaScript не приостанавливает выполнение скрипта как такового, а просто говорит компилятору выполнить код когда-нибудь в будущем.
Нет ни одной функции, которая действительно может приостановить выполнение, встроенное в JavaScript. Однако вы можете написать свою собственную функцию, которая делает что-то вроде безусловного цикла до тех пор, пока не будет достигнуто время, используя функцию Date() и добавляя нужный вам интервал времени.
Если вам нужно только проверить задержку вы можете использовать это:
function delay(ms) {
ms += new Date().getTime();
while (new Date() < ms){}
}
И тогда если вы хотите задержаться на 2 секунды вы это сделаете:
delay(2000);
Хотя, возможно, это не лучший вариант для производства. Подробнее об этом в комментариях
Мне очень понравилось объяснение Мауриуса (самый высокий отклик) с тремя различными методами вызова setTimeout .
В моем коде я хочу автоматически перейти на предыдущую страницу после завершения события сохранения AJAX. Завершение события save имеет небольшую анимацию в CSS, указывающую на успешное сохранение.
В моем коде я нашел разницу между первыми двумя примерами:
setTimeout(window.history.back(), 3000);
Этот не ждет таймаута-back() вызывается почти сразу, независимо от того, какой номер я ввел для задержки.
Однако, изменив это на:
setTimeout(function() {window.history.back()}, 3000);
Это делает именно то, на что я надеялся.
Это не относится конкретно к операции back(), то же самое происходит и с операцией alert() . В основном при использовании alert() в первом случае время задержки игнорируется. Когда я закрываю всплывающее окно, анимация для CSS продолжается.
Таким образом, я бы рекомендовал второй или третий метод, который он описывает, даже если вы используете встроенные функции и не используете аргументы.
У меня было несколько команд ajax, которые я хотел выполнить с задержкой между ними. Вот простой пример одного из способов сделать это. Хотя я готов быть разорванным в клочья за свой нетрадиционный подход. :)
// Show current seconds and milliseconds
// (I know there are other ways, I was aiming for minimal code
// and fixed width.)
function secs()
{
var s = Date.now() + ""; s = s.substr(s.length - 5);
return s.substr(0, 2) + "." + s.substr(2);
}
// Log we're loading
console.log("Loading: " + secs());
// Create a list of commands to execute
var cmds =
[
function() { console.log("A: " + secs()); },
function() { console.log("B: " + secs()); },
function() { console.log("C: " + secs()); },
function() { console.log("D: " + secs()); },
function() { console.log("E: " + secs()); },
function() { console.log("done: " + secs()); }
];
// Run each command with a second delay in between
var ms = 1000;
cmds.forEach(function(cmd, i)
{
setTimeout(cmd, ms * i);
});
// Log we've loaded (probably logged before first command)
console.log("Loaded: " + secs());
Вы можете скопировать блок кода и вставить его в окно консоли и увидеть что-то вроде:
Loading: 03.077
Loaded: 03.078
A: 03.079
B: 04.075
C: 05.075
D: 06.075
E: 07.076
done: 08.076
Как сказал другой, setTimeout-это ваша самая безопасная ставка
Но иногда вы не можете отделить логику от новой функции, тогда вы можете использовать Date.now(), чтобы получить миллисекунды и сделать задержку самостоятельно....
function delay(milisecondDelay) {
milisecondDelay += Date.now();
while(Date.now() < milisecondDelay){}
}
alert('Ill be back in 5 sec after you click ok....');
delay(5000);
alert('im back ' +new Date());