jQuery : 코드를 실행하지 않고 1 초간 대기 / 지연


129

.delayjQuery 에서 메소드를 작동 시킬 수 없습니다 .

$.delay(3000); // not working
$(queue).delay(3000); // not working

제어되지 않는 변경 값이 다른 값보다 크거나 같을 때까지 대기하기 위해 while 루프를 사용하고 있으며 X 초 동안 실행을 중단 할 수있는 방법을 찾을 수 없습니다.


콜백에서 setTimeout 사용
theshadowmonkey

어떤 버전의 jquery를 사용하고 있습니까?
L7ColWinters

1
즉 지연 함수가 설계된 것이 아니라 대기중인 jquery 이벤트 (fade (). delay (). show ()) 사이에서 사용하도록 설계되었습니다. setTimeOut 함수가 필요합니다.
JoJa

@JoJa : 요점은 맞지만, 논 인수 형식의 show (및 hide)는 effect queue를 사용하지 않습니다.
Jay Tomten

3
지연으로 달성하려는 것을 명시하십시오. 모든 JavaScript는 단일 스레드에서 실행되며 X 초 동안 정지하면 사용자 환경이 저하 될 수 있습니다.
Dmitry Shkuropatsky

답변:


176

$ .delay는 큐에서 애니메이션을 지연시키는 데 사용되며 실행을 중단하지 않습니다.

while 루프를 사용하는 대신 다음을 사용하여 매초마다 검사를 수행하는 메소드를 재귀 적으로 호출해야합니다 setTimeout.

var check = function(){
    if(condition){
        // run when condition is met
    }
    else {
        setTimeout(check, 1000); // check again in a second
    }
}

check();

1
setTimeout으로 충분하다고 생각합니다.
Jiemurat

3
너의 폭탄은 내 코드를 수정하는 데 필요한 것입니다.
jemiloii의

@Jiemurat와 미래의 다른 사람들 : setTimeout은 실행 흐름을 중단시키지 않습니다. Niessner의 위대한 코드는 조건이 충족 될 때까지 이것을 얻습니다!
Gabrer

실행 흐름을 깰 필요가 없다면 간단히 사용할 수 있습니다 setTimeout().
Joshua Pinter

나는 항상 "체크는 함수가 아니다"를 얻는다. 나의 체크 함수는 두 개의 파라미터를 가지고있다
Black

211

이런 식으로 일부 작업을 지연시킬 수도 있습니다.

setTimeout(function (){

  // Something you want delayed.

}, 5000); // How long do you want the delay to be (in milliseconds)? 

7
참고로, 이는 실행 흐름을 방해하지 않으므로 몇 초 동안 "모든 것을 중지"해야하는 경우 Niessner가 게시 한 것과 같은 것이 필요합니다.
Joshua Pinter

예 ... 함수에 대한 콜백이며 차단하지 않습니다. 답변 주셔서 감사합니다, 문제가 해결되었습니다.
Bertus Kruger

주파수가 매우 짧고이 기능이 영원히 실행될 것으로 예상한다면 결국 스택을 날려 버릴까요?
자살 토끼

16

ES6 setTimeout

setTimeout(() => {
  console.log("we waited 204586560000 ms to run this code, oh boy wowwoowee!");
}, 204586560000);

편집 : 204586560000 ms는 내가 올바르게 계산했다고 가정하고 원래 질문 과이 답변 사이의 대략적인 시간입니다.


2
원래 질문에서이 답변까지의 대략적인 시간을 사용하여 정말 좋은
Fuzzybear

9

jQuery의 delay기능은 효과 및 효과 대기열과 함께 사용하기위한 것입니다. delay문서 및 예제를 참조하십시오 .

$('#foo').slideUp(300).delay(800).fadeIn(400);

변경 사항에 대한 변수를 관찰하려면 다음과 같이 할 수 있습니다

(function() {
    var observerInterval = setInterval(function() {
        if (/* check for changes here */) {
           clearInterval(observerInterval);
           // do something here
        }
    }, 1000);
})();

setInterval을 두 번째 필수 매개 변수 밀리 초 단위로 시간이)
sara_thepot

1
@ sara.potyscki에게 감사드립니다.
Julian D.

@JulianD. 이 제안에 감사드립니다. 해결책을 찾기 위해이 질문에 착륙했습니다. 이것이 바로 프로젝트에 필요한 것입니다.
Cheryl Velez

8

JavaScript setTimeout는 매우 좋은 솔루션입니다.

function funcx()
   {
   // your code here
   // break out here if needed
   setTimeout(funcx, 3000);
   }

funcx();

delayjQuery 의 함수는 주로 jQuery 애니메이션 대기열에서 애니메이션을 지연시키는 데 사용됩니다.


5

delay()코드 흐름을 중단하지 않고 다시 실행하십시오. JavaScript에서는 그렇게 할 수있는 실용적인 방법이 없습니다. 모든 것은 setTimeout다른 사람들이 언급 한 것과 같이 콜백을 취하는 함수로 수행해야합니다 .

jQuery의 목적은 delay()애니메이션 큐가 실행되기 전에 대기하도록하는 것입니다. 예를 들어 $(element).delay(3000).fadeIn(250);3 초 후에 요소가 희미 해집니다.


5

자바 스크립트 만 jQuery없이 작동합니다.

<!DOCTYPE html>
<html>
    <head>
        <script>
            function sleep(miliseconds) {
                var currentTime = new Date().getTime();
                while (currentTime + miliseconds >= new Date().getTime()) {
                }
            }

            function hello() {
                sleep(5000);
                alert('Hello');
            }
            function hi() {
                sleep(10000);
                alert('Hi');
            }
        </script>
    </head>
    <body>
        <a href="#" onclick="hello();">Say me hello after 5 seconds </a>
        <br>
        <a href="#" onclick="hi();">Say me hi after 10 seconds </a>


    </body>
</html>

1
자바 스크립트에서 대기하는 것은 나쁜 생각입니다! 루프가 실행되는 동안 모든 자바 스크립트 기능이 중지 됩니다. 예상치 못한 부작용이있을 것입니다. setTimeout ()과 같은 비 차단 함수를 사용하는 것이 훨씬 좋습니다.
Kevin G.

4

Javascript는 비동기식 프로그래밍 언어이므로 한동안 실행을 중지 할 수 없습니다. 실행을 [의사] 중지 할 수있는 유일한 방법은 지연이 아니라 "지연된 함수 콜백"인 setTimeout ()을 사용하는 것입니다.


2

ES6 기능을 사용 중이고 비동기 기능을 사용하는 경우이 기능을 사용하여 특정 시간 동안 코드 실행을 효과적으로 중지 할 수 있습니다.

const delay = millis => new Promise((resolve, reject) => {
  setTimeout(_ => resolve(), millis)
});

이것은 당신이 그것을 사용하는 방법입니다 :

await delay(5000);

요청 된 밀리 초 동안 정지하지만 비동기 함수 인 경우에만 중단됩니다 . 아래 예 :

const myFunction = async function() {
  // first code block ...

  await delay(5000);

  // some more code, executed 5 seconds after the first code block finishes
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.