jQuery: কোড নির্বাহ না করে 1 সেকেন্ড অপেক্ষা / বিলম্ব করুন


129

আমি .delayjQuery এ কাজ করার পদ্ধতিটি পেতে পারি না :

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

আমি একটি অনিয়ন্ত্রিত পরিবর্তনশীল মান অন্যের চেয়ে বড় বা সমান না হওয়া পর্যন্ত অপেক্ষা করতে কিছুক্ষণ লুপ ব্যবহার করছি এবং এক্স সেকেন্ডের জন্য মৃত্যুদন্ড কার্যকর করার কোনও উপায় খুঁজে পাচ্ছি না।


কলব্যাকে সেটটাইমআউট ব্যবহার করার চেষ্টা করুন
থিশাদোমোনকি

আপনি jquery কোন সংস্করণ ব্যবহার করছেন?
L7ColWinters 14

1
বিলম্বের ফাংশনটি এটির জন্য নয়, এটি সারিবদ্ধ jquery ইভেন্টগুলির মধ্যে ব্যবহারের জন্য ডিজাইন করা হয়েছে (যেমন বিবর্ণ ()। বিলম্ব ()। প্রদর্শন ())। আপনার সেটটাইমআউট ফাংশন প্রয়োজন।
জোজা

@ জোজা: আপনি মূল পয়েন্টে সঠিক, তবে কোনও আর্গুমেন্ট ফর্ম প্রদর্শন (এবং লুকিয়ে রাখুন) প্রভাবগুলি সারি ব্যবহার করবেন না।
জে টমটেন

3
দেরী করে আপনি কী অর্জন করতে চাইছেন তা দয়া করে জানান। সমস্ত জাভাস্ক্রিপ্ট একক থ্রেডে চালিত হয় এবং এটি X সেকেন্ডের জন্য জমাট বাঁধা ব্যবহারকারীর বিরূপ অভিজ্ঞতা হতে পারে।
দিমিত্রি শুকোরোপাটস্কি

উত্তর:


176

de .ডলে একটি সারিতে অ্যানিমেশনগুলিকে বিলম্ব করতে ব্যবহৃত হয়, এক্সিকিউশন থামানো নয়।

কিছুক্ষণ লুপ ব্যবহার না করে, আপনাকে পুনরাবৃত্তভাবে এমন একটি পদ্ধতি কল করতে হবে যা প্রতি সেকেন্ডে চেকটি সম্পাদন করে setTimeout:

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

check();

1
আমি মনে করি, সেটটাইমআউট যথেষ্ট।
জিমুরাত

3
আপনার বোমা ভাই, আমার কোড ঠিক করার জন্য এটি আমার প্রয়োজন needed
জিমিলোই

@ জিমুরাত এবং ভবিষ্যতে অন্য যে কেউ: সেটটাইমআউট মৃত্যুদন্ড কার্যকর করে না। নিসসনারের দুর্দান্ত কোডটি এই নিরপেক্ষ প্রাপ্তটি শর্তগুলি সত্য হয়ে উঠেছে!
গ্যাবার

যদি আপনার মৃত্যুদন্ড কার্যকর করার প্রবাহটি ভাঙার দরকার না হয় তবে আপনি কেবল ব্যবহার করতে পারেন setTimeout()
জোশুয়া পিন্টার 10'15

আমি সর্বদা "চেক কোনও ফাংশন নয়" পাই, আমার চেক ফাংশনটির দুটি পরামিতি রয়েছে
ব্ল্যাক

211

আপনি এইভাবে কিছু অপারেশন বিলম্ব করতে পারেন:

setTimeout(function (){

  // Something you want delayed.

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

7
কেবলমাত্র একটি এফওয়াইআই, এটি কার্যকর করার প্রবাহকে ভাঙবে না, তাই যদি আপনাকে কয়েক সেকেন্ডের জন্য "সবকিছু বন্ধ" করতে হয় তবে আপনার নিসনার পোস্ট করেছেন এমন কিছু প্রয়োজন হবে need
জোশুয়া পিন্টার 10'15

হ্যাঁ ... এটি ফাংশনে একটি কলব্যাক এবং ব্লক করে না। উত্তরের জন্য ধন্যবাদ, এটি আমার সমস্যাটি স্থির করেছে।
বার্টাস ক্রুগার

যদি ফ্রিকোয়েন্সি অত্যন্ত সংক্ষিপ্ত হয় এবং আমরা এই ফাংশনটি চিরকালের জন্য চলমান আশা করি, তবে এটি শেষ পর্যন্ত স্ট্যাকটি ফুঁকবে?
সুইসাইড বানি

16

ES6 সেটটাইমআউট

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

সম্পাদনা করুন: 204586560000 এমএস মূল প্রশ্ন এবং এই উত্তরের মধ্যে আনুমানিক সময় ... ধরে নিচ্ছি আমি সঠিকভাবে গণনা করেছি।


2
মূল উত্তর থেকে এই উত্তরের আনুমানিক সময়টি ব্যবহার করে সত্যিই দুর্দান্ত
ফুজিবিয়ার

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);
})();

সেটইন্টারওয়ালের একটি দ্বিতীয় বাধ্যতামূলক প্যারামিটার রয়েছে, সময়টি মিলি সেকেন্ডে;)
সারা_থপট

1
ধন্যবাদ @ সারা.পটিস্কি, স্থির।
জুলিয়ান ডি

@JulianD। এই পরামর্শের জন্য আপনাকে ধন্যবাদ। সমাধানের জন্য গুগল করার সময় আমি এই প্রশ্নটিতে অবতরণ করেছি। আমার প্রকল্পের জন্য এটি ঠিক আমার প্রয়োজন ছিল।
চেরিল Velez

8

জাভাস্ক্রিপ্ট setTimeoutএকটি খুব ভাল সমাধান:

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

funcx();

delayJQuery এ ফাংশনটি বেশিরভাগই jQuery অ্যানিমেশন কাতারে অ্যানিমেশনগুলিতে বিলম্ব করার জন্য ব্যবহৃত হয়।


5

delay()কোডের প্রবাহকে থামায় না তারপরে এটিকে আবার চালিত করুন। জাভাস্ক্রিপ্টে এটি করার কোনও ব্যবহারিক উপায় নেই। কলব্যাকগুলি গ্রহণ করে এমন ফাংশন দিয়ে সমস্ত কিছু করতে হবে 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
জাভাস্ক্রিপ্টে অপেক্ষা করার জন্য লুপিং একটি খারাপ ধারণা! লুপ চলাকালীন সমস্ত জাভাস্ক্রিপ্ট কার্যকারিতা বন্ধ হয়ে যাবে। এতে অপ্রত্যাশিত পার্শ্ব-প্রতিক্রিয়া হবে। সেটটাইমআউট () এর মতো নন-ব্লকিং ফাংশনগুলি ব্যবহার করা আরও ভাল।
কেভিন জি।

4

জাভাস্ক্রিপ্ট একটি অ্যাসিনক্রোনাস প্রোগ্রামিং ল্যাঙ্গুয়েজ তাই আপনি কিছু সময়ের জন্য কার্যকর করা বন্ধ করতে পারবেন না; আপনি কেবলমাত্র কার্যকরভাবে [সিউডো] একটি নির্বাহ থামাতে পারবেন সেটটাইমআউট () ব্যবহার করছেন যা কোনও বিলম্ব নয় বরং "বিলম্বিত ফাংশন কলব্যাক"।


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.