jQuery: รอ / หน่วงเวลา 1 วินาทีโดยไม่ต้องใช้รหัส


129

ฉันไม่สามารถใช้.delayวิธีการใน jQuery ได้:

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

ฉันใช้การวนรอบสักครู่เพื่อรอจนกว่าค่าการเปลี่ยนแปลงที่ไม่สามารถควบคุมได้จะมากกว่าหรือเท่ากับค่าอื่นและฉันไม่สามารถหาวิธีที่จะแฮ็กการดำเนินการเป็นเวลา X วินาที


ลองใช้ setTimeout ในการติดต่อกลับ
thkeymonkey

คุณกำลังใช้ jquery รุ่นใดอยู่
L7ColWinters

1
นั่นไม่ใช่สิ่งที่ฟังก์ชั่นการออกแบบล่าช้านั้นถูกออกแบบมาเพื่อใช้ระหว่างเหตุการณ์ jquery ที่เข้าคิว (เช่น fade (). delay (). show ()) คุณต้องการฟังก์ชัน setTimeOut
JoJa

@JoJa: คุณถูกต้องในประเด็นหลักอย่างไรก็ตามไม่มีรูปแบบการโต้แย้งของการแสดง (และซ่อน) ไม่ได้ใช้คิวผลกระทบ
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
เพียงแค่ FYI สิ่งนี้จะไม่หยุดยั้งการไหลเวียนของการดำเนินการดังนั้นหากคุณต้องการ "หยุดทุกสิ่ง" เป็นเวลาสองสามวินาทีคุณจะต้องมีสิ่งที่ Niessner โพสต์ไว้
Joshua Pinter

ใช่ ... มันเป็นการเรียกกลับไปยังฟังก์ชันและไม่ได้ปิดกั้น ขอบคุณสำหรับคำตอบมันช่วยแก้ไขปัญหาของฉัน
Bertus Kruger

หากความถี่สั้นมากและเราคาดว่าฟังก์ชันนี้จะทำงานตลอดไปในที่สุดมันจะระเบิดสแต็กหรือไม่
Suicide Bunny

16

ES6 setTimeout

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

แก้ไข: 204586560000 ms เป็นเวลาโดยประมาณระหว่างคำถามเดิมและคำตอบนี้ ... สมมติว่าฉันคำนวณอย่างถูกต้อง


2
ดีมากที่ใช้เวลาโดยประมาณจากคำถามเดิมถึงคำตอบนี้
Fuzzybear

9

delayฟังก์ชันของ jQuery มีไว้เพื่อใช้กับเอฟเฟกต์และคิวเอฟเฟกต์ดู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 ขอบคุณสำหรับข้อเสนอแนะนี้. ฉันลงจอดคำถามนี้ในขณะที่ googling สำหรับการแก้ปัญหา นี่คือสิ่งที่ฉันต้องการสำหรับโครงการของฉัน
Cheryl Velez

8

JavaScript setTimeoutเป็นโซลูชันที่ดีมาก:

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

funcx();

delayฟังก์ชั่นใน jQuery ส่วนใหญ่จะใช้สำหรับภาพเคลื่อนไหวล่าช้าในคิวภาพเคลื่อนไหว jQuery


5

delay()ไม่หยุดการไหลของรหัสจากนั้นเรียกใช้อีกครั้ง ไม่มีวิธีการใช้งานจริงใน JavaScript ทุกอย่างจะต้องทำด้วยฟังก์ชั่นที่ใช้โทรกลับเช่นsetTimeoutที่คนอื่นได้กล่าวถึง

วัตถุประสงค์ของ jQuery delay()คือการทำให้คิวภาพเคลื่อนไหวรอก่อนดำเนินการ ตัวอย่างเช่น$(element).delay(3000).fadeIn(250);จะทำให้องค์ประกอบหายไปภายใน 3 วินาที


5

javascript เท่านั้นมันจะทำงานโดยไม่มี 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
การวนซ้ำเพื่อรอใน javascript เป็นความคิดที่ไม่ดี! ฟังก์ชันจาวาสคริปต์ทั้งหมดจะหยุดในขณะที่ลูปทำงาน สิ่งนี้จะมีผลข้างเคียงที่ไม่คาดคิด จะดีกว่ามากถ้าใช้ฟังก์ชั่นที่ไม่ปิดกั้นเช่น setTimeout ()
Kevin G.

4

Javascript เป็นภาษาการเขียนโปรแกรมแบบอะซิงโครนัสดังนั้นคุณจึงไม่สามารถหยุดการดำเนินการเป็นระยะเวลาหนึ่ง วิธีเดียวที่คุณสามารถ [หลอก] หยุดการประมวลผลคือการใช้ setTimeout () ที่ไม่ใช่ความล่าช้า แต่เป็น "การเรียกฟังก์ชั่นล่าช้า"


2

หากคุณกำลังใช้คุณสมบัติ ES6 และคุณอยู่ในฟังก์ชัน async คุณสามารถหยุดการเรียกใช้โค้ดได้อย่างมีประสิทธิภาพในช่วงเวลาหนึ่งด้วยฟังก์ชั่นนี้:

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

นี่คือวิธีที่คุณใช้:

await delay(5000);

มันจะแผงลอยสำหรับจำนวนเงินที่ขอมิลลิวินาที แต่เฉพาะในกรณีที่คุณอยู่ในฟังก์ชั่น async ตัวอย่างด้านล่าง:

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.