2013-06-01 2 views
11

У меня есть javascript-файл, и в нескольких местах я хочу добавить небольшую задержку, поэтому сценарий достигнет этой точки, подождите 3 секунды, а затем продолжит работу с остальной частью кода. Лучший способ, которым я думал сделать это, - создать функцию, которую я мог бы вызвать из любого места в скрипте.Как создать функцию задержки javascript

function startDelay(lengthOfDelay) 
{ 
//code to make it delay for lengthOfDelay amount of time 
} 

Однако я не могу найти способ реализовать код, чтобы заставить его ждать. Я посмотрел на setTimeout, но вам нужно было жестко закодировать функцию в нем, что не помогло мне.

Есть ли способ, которым я могу заставить скрипт совершать паузу в течение нескольких секунд? У меня нет проблем с замораживанием пользовательского интерфейса, пока код приостановлен.

Если нет, есть ли способ, которым я мог бы использовать PHP sleep() для достижения этого? (Я знаю, что PHP - это серверная сторона, а Javascript - клиентская, но, возможно, есть способ, о котором я не слышал.)

+2

Самый простой способ - использовать [setTimeout] (https://developer.mozilla.org/en-US/docs/Web/API/window.setTimeout) и сделать оставшийся код в функции, которую вы даете to setTimeout. –

+1

http://stackoverflow.com/questions/10312963/javascript-settimeout – smerny

ответ

30

Вам не нужно использовать анонимную функцию с setTimeout. Вы можете сделать что-то вроде этого:

setTimeout(doSomething, 3000); 

function doSomething() { 
    //do whatever you want here 
} 
+0

Как создать такую ​​функцию, как startDelay (lengthOfDelay), которую я мог бы вызвать из ** в любом месте ** в скрипте, и сделать это для остальных код потом, а не просто _ // делай все, что хочешь здесь?? – user2370460

+0

Я не совсем уверен, что вы хотите сделать именно так. Вы хотите остановить выполнение страницы или запланировать функцию, которая будет выполняться после задержки? – Kassem

+0

@ Кассем Я думаю, что он означает, например, что, если вы хотите, чтобы console.log-сообщение каждую секунду использовало цикл for? то есть 'while (true) {[функция задержки, включающая console.log]}' Я не думаю, что ваша функция будет выполняться последовательно. – geotheory

2

Ах да. Добро пожаловать в асинхронное выполнение.

В принципе, приостановка сценария заставит браузер и страницу перестать отвечать на запросы в течение 3 секунд. Это ужасно для веб-приложений, и поэтому не поддерживается.

Вместо этого вы должны думать о событиях. Используйте setTimeout для вызова функции через определенное время, которое будет продолжать запускать JavaScript на странице в течение этого времени.

+1

Есть ли способ сделать это? Сделать страницу не отвечающей на самом деле является положительной вещью для меня! – user2370460

+1

fortunatelly yes: sleep.js http: // stackoverflow.com/a/16873849/667927 –

0

Вы можете создать задержку, используя следующий пример

setInterval(function(){alert("Hello")},3000); 

Заменить с # в миллисекундах

Вы можете разместить содержание того, что вы хотите выполнить внутри функции.

+5

Этот ответ немного не хватает (я думаю), потому что setInterval будет продолжать работать каждые 3 секунды, а не один раз. –

+0

@AdamDavis Я протестировал этот метод, и у меня не было никаких проблем. Если вы или кто-то еще проверите это и продемонстрируете другим, сообщите об этом сообществу. Спасибо –

+0

@CBC_NS Я только что пробовал, и у меня также повторялось это каждые 3 секунды. Приятно иметь в виду, хотя. –

Смежные вопросы