মাইক বোস্টকের সমাধানের আরও একটি সংস্করণ নীচে দেওয়া হয়েছে এবং @ কাশেসান্ডারের উত্তরে @ হিউজেস মন্তব্য দ্বারা অনুপ্রাণিত হয়েছেন। এটি transition
শেষ হওয়ার পরে একক কলব্যাক করে ।
একটি drop
ফাংশন দেওয়া হয়েছে ...
function drop(n, args, callback) {
for (var i = 0; i < args.length - n; ++i) args[i] = args[i + n];
args.length = args.length - n;
callback.apply(this, args);
}
... আমরা এর d3
মতো প্রসারিত করতে পারি :
d3.transition.prototype.end = function(callback, delayIfEmpty) {
var f = callback,
delay = delayIfEmpty,
transition = this;
drop(2, arguments, function() {
var args = arguments;
if (!transition.size() && (delay || delay === 0)) {
d3.timer(function() {
f.apply(transition, args);
return true;
}, typeof(delay) === "number" ? delay : 0);
} else {
var n = 0;
transition.each(function() { ++n; })
.each("end", function() {
if (!--n) f.apply(transition, args);
});
}
});
return transition;
}
জেএসফিডাল হিসাবে ।
ব্যবহার transition.end(callback[, delayIfEmpty[, arguments...]])
:
transition.end(function() {
console.log("all done");
});
... বা transition
empty চ্ছিক বিলম্বের সাথে খালি থাকলে:
transition.end(function() {
console.log("all done");
}, 1000);
... বা alচ্ছিক callback
যুক্তি সহ:
transition.end(function(x) {
console.log("all done " + x);
}, 1000, "with callback arguments");
d3.transition.end
মিলিসেকেন্ডের সংখ্যা নির্দিষ্ট করা থাকলে বা দ্বিতীয় তর্কটি সত্যবাদী হলেcallback
খালি দিয়েও পাস করা প্রয়োগ করা হবে । এটি কোনও অতিরিক্ত যুক্তি (এবং কেবলমাত্র সেই যুক্তিগুলি) কাছে ফরোয়ার্ড করবে । গুরুত্বপূর্ণভাবে, এটি ডিফল্টরূপে যদি খালি থাকে তবে এটি প্রয়োগ করবে না , এটি সম্ভবত এই ক্ষেত্রে একটি নিরাপদ অনুমান।transition
callback
callback
transition