संक्षिप्त उत्तर यह है कि संक्रमण पाने के लिए कोई मानक तरीका नहीं है और आप ऐसा करने के लिए नहीं हैं। जैसा कि, यह समर्थित नहीं है।
थोड़ा लंबा जवाब यह है कि आपके उद्देश्यों के लिए, आप शायद __transition__
का उपयोग करके इसे हैक कर सकते हैं। विचार यह जांचना है कि __transition__
मौजूद है और यदि ऐसा है, तब तक प्रतीक्षा करें जब तक कि यह नया (उप) संक्रमण शुरू करने से पहले न हो।
कि ऐसा करने के लिए, यह एक उचित समारोह के साथ चयन प्रोटोटाइप का विस्तार करने में मदद करता है:
d3.selection.prototype.getTransition = function() {
if(this[0][0].__transition__) {
return this[0][0].__transition__[1];
} else return undefined;
}
ध्यान दें कि यह यहाँ अत्यंत hacky और केवल काम है, अगर वहाँ में ठीक एक तत्व चयनके साथ बिल्कुल एक संक्रमण। हालांकि आपको विचार मिलना चाहिए।
अब, हम इस फ़ंक्शन का उपयोग यह निर्धारित करने के लिए कर सकते हैं कि कोई संक्रमण चल रहा है या नहीं।
if(sel.getTransition() !== undefined) {
// transition is there
} else {
// no transition
}
दुर्भाग्य से, __transition__
आप संक्रमण वस्तु फिर से संगठित करने की अनुमति नहीं है, यानि कि निम्नलिखित काम नहीं करेगा।
sel.getTransition().transition()...
तो एक subtransition वर्तमान में चल रहे एक के बाद शुरू होता है अनुकरण करने के लिए कर रहा है पूरा, कुछ चल रहा है कि क्या जांच करने के लिए और जैसे ही कुछ भी नहीं है के रूप में, अपने नए संक्रमण शुरू setTimeout
का उपयोग करें:
function check() {
if(sel.getTransition() !== undefined) {
setTimeout(check, 100);
} else {
sel.transition().duration(1000)...;
}
}
check();
आप संक्रमण के बेहतर प्रभाव को बनाने के लिए चेक (100 एमएमएस) के बीच अंतराल को कम कर सकता है जो तुरंत पिछले एक का पालन करता है।
पूर्ण उदाहरण here। ध्यान दें कि लगभग सभी मामलों में, कहीं भी संक्रमण ऑब्जेक्ट का संदर्भ रखने और इसका उपयोग करने के लिए यह कहीं अधिक आसान और बेहतर है। यह उदाहरण वास्तव में केवल अवधारणा के एक हैकी सबूत के रूप में कार्य करता है।
क्या आप निर्दिष्ट कर सकते हैं कि आप v2 या v3 के बारे में बात कर रहे हैं? – Wex
मैंने संस्करण 3 कहा, लेकिन शायद मुझे इसे बोल्ड करना चाहिए या कुछ .. – Chuck
निरीक्षण करना \ _transition_ शायद यह करने का सबसे प्रभावी तरीका है। एक तत्व समाप्त होने पर संक्रमण के बाद \ _transition_ गुण हटा दिया जाता है, इसलिए, आप यह देखने के लिए बस एक जांच कर सकते हैं कि \ _transition_ प्रॉपर्टी मौजूद है या नहीं। यदि ऐसा है, तो आप जानते हैं कि उस तत्व पर एक संक्रमण हो रहा है, और आप अधिक विस्तृत जानकारी प्राप्त करने के लिए \ _transition_ जांच सकते हैं। आपके पास संक्रमण तत्व के उप-तत्वों को हथियाने के विकल्प भी हैं, जैसे transition.selectAll() का उपयोग करना। आप transition.each() –