কোনও প্রভাব শেষ না হওয়া পর্যন্ত কীভাবে অপেক্ষা করতে jQuery পাবেন?


107

আমি নিশ্চিত যে আমি এই সম্পর্কে অন্য দিন পড়েছি তবে আমি এটি কোথাও খুঁজে পাচ্ছি না।
আমার একটি fadeOut()ইভেন্ট রয়েছে যার পরে আমি উপাদানটি সরিয়ে ফেলি, তবে jQuery উপাদানটি ম্লান হয়ে যাওয়ার সমাপ্তির আগে উপাদানটি সরিয়ে ফেলছে।
উপাদানটি বিবর্ণ না হওয়া পর্যন্ত আমি কীভাবে jQuery অপেক্ষা করতে পারি, তারপরে এটি সরিয়ে ফেলতে পারি?

উত্তর:


167

আপনি একটি কলব্যাক ফাংশন নির্দিষ্ট করতে পারেন:

$(selector).fadeOut('slow', function() {
    // will be called when the element finishes fading out
    // if selector matches multiple elements it will be called once for each
});

ডকুমেন্টেশন এখানে


বিঙ্গো। আমি ভেবেছিলাম এটি ছিল তবে আমার যা করা দরকার তা ছিল আমার সম্পূর্ণ ফাংশনটি কেবল অপসারণের অংশটিই নয়। পিএস যদি কারও কাছে আগ্রহী আগ্রহী তবে আমি এটি পড়েছি এবং এখন আবার এটি খুঁজে পেয়েছি হ'ল লার্নিং জ্যাকুয়েরি - আরও ভাল ইন্টারঅ্যাকশন এবং ডিজাইন। আবার ধন্যবাদ
ইউরিডিয়াম

: কেউ পুরাতন jQuery এর থাকে, তাহলে এই "অ্যানিমেশন সম্পন্ন কলব্যাক" বাগ একটা বাজে ছিল bugs.jquery.com/ticket/5684
JustAMartin

178

JQuery 1.6 সংস্করণ সহ আপনি .promise()পদ্ধতিটি ব্যবহার করতে পারেন ।

$(selector).fadeOut('slow');
$(selector).promise().done(function(){
    // will be called when all the animations on the queue finish
});

4
এটি বেশিরভাগ jQuery অ্যানিমেশনগুলির জন্য অপ্রয়োজনীয় কারণ বেশিরভাগ পদ্ধতিতে কলব্যাক আরগ রয়েছে তবে আপনি ব্যবহার করছেন promise()বা when()এবং done()আপনি তৃতীয় পক্ষের পদ্ধতিগুলি বা এমনকি আপনার নিজস্ব থেকেও খুব শীতল আচরণের সুযোগ নিতে পারেন। অর্থের জন্য +1 .promise()!
stuartc

4
এটি আগে শোনেনি, কেবল আমার বাটটি সংরক্ষণ করেছে।
প্রিন্সস্পেকস

1
আমার ক্ষেত্রে, আমি আমার কোডে অন্য কোথাও ঘটছে এমন একটি উপাদানটির বর্তমান অ্যানিমেশনটি অ্যাক্সেস করার চেষ্টা করছিলাম এবং এভাবে কলব্যাকের কাছে আমার অ্যাক্সেস ছিল না। +1
ক্রিশ্চিয়ান

11
প্রতিশ্রুতি () ব্যবহার করা আপনাকে সবকিছু শেষ হয়ে যাওয়ার জন্য একটি একক কলব্যাক সেট আপ করতে দেয়। যদি আপনি 10 টির সেটে ফেইডআউট () কল করেন তবে যথাযথ সুযোগে 'এই' সেট সহ প্রতিটি জিনিসের জন্য একটি কলব্যাক আসবে। আপনি যদি কেবল একবার গুলি চালাতে চান তবে এই ফাংশনটি সত্যই সহায়ক। এছাড়াও: আপনি যদি এমন কোনও নির্বাচককে অ্যানিমেটেড করেন যা শূন্য উপাদানগুলির সাথে মেলে, প্রতিশ্রুতি () যাই হোক না কেন শেষ পর্যন্ত গুলি চালানো হবে।
zslayton

6
আপনি এটির মতো $(selector).fadeOut('slow').promise().done(function(){...});
এটিও শৃঙ্খলিত

9

সমাপ্ত $.when()না হওয়া পর্যন্ত আপনি অপেক্ষা করতেও ব্যবহার করতে পারেন promise:

var myEvent = function() {
    $( selector ).fadeOut( 'fast' );
};
$.when( myEvent() ).done( function() {
    console.log( 'Task finished.' );
} );

আপনি যদি এমন একটি অনুরোধ করছেন যা ব্যর্থ হতে পারে তবে আপনি আরও একধাপ এগিয়ে যেতে পারেন:

$.when( myEvent() )
    .done( function( d ) {
        console.log( d, 'Task done.' );
    } )
    .fail( function( err ) {
        console.log( err, 'Task failed.' );
    } )
    // Runs always
    .then( function( data, textStatus, jqXHR ) {
        console.log( jqXHR.status, textStatus, 'Status 200/"OK"?' );
    } );

2
এই উত্তরের এই অংশটি ব্যবহার $.when()করে না কারণ myEvent()কোনও প্রতিশ্রুতি দেয় না এবং $.when()আশা করে যে আপনি এটির কাজটি করার জন্য এক বা একাধিক প্রতিশ্রুতি দিয়েছিলেন।
jਫਰ00

6

যদি আপনি এমন কিছু পরিবর্তন করতে চান যা এক জায়গায় ফিড হয়ে যায় এবং অন্যটিকে একই জায়গায় ফিড করে, আপনি ডিভগুলিতে একটি {অবস্থান: পরম} বৈশিষ্ট্য রাখতে পারেন, তাই উভয় অ্যানিমেশন একে অপরের শীর্ষে বাজায়, এবং আপনার কাছে নেই পরবর্তী শুরু করার আগে একটি অ্যানিমেশন শেষ হয়ে যাওয়ার জন্য অপেক্ষা করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.