मैं लोकप्रिय डी 3 लाइब्रेरी के वी 3 का उपयोग कर रहा हूं और मूल रूप से तीन संक्रमण करना चाहता हूं, इसके बाद एक दूसरे के बाद: पहला संक्रमण बाहर निकलने के चयन पर लागू होना चाहिए, दूसरा अपडेट चयन और प्रवेश चयन के लिए तीसरा। उन्हें इस तरह से जंजीर किया जाना चाहिए कि जब चयन में से कोई एक खाली हो, तो उसका संबंधित संक्रमण छोड़ दिया जाता है। अर्थात। जब कोई निकास चयन नहीं होता है, तो अद्यतन चयन तुरंत शुरू होना चाहिए। अब तक, मैं इस कोड के साथ आया हूं (delay
फ़ंक्शन का उपयोग करके)। सभी यह संक्रमण और "छोड़" की अनुमति नहीं है कीडी 3: अलग-अलग चयनों पर सही ढंग से चेन संक्रमण कैसे करें
// DATA JOIN
var items = d3.select('#data').selectAll('.item');
items = items.data(data, function(d){
return d.twitter_screenname;
});
// EXIT
items.exit().transition().duration(TRANSITION_DURATION).style('opacity', 0).remove();
// UPDATE
// Divs bewegen
items.transition().duration(TRANSITION_DURATION).delay(TRANSITION_DURATION * 1)
.style('left', function(d, i) {
return positions[i].left + "px";
}).style('top', function(d, i) {
return positions[i].top + "px";
});
// ENTER
// Divs hinzufügen
var div = items.enter().append('div')
.attr('class', 'item')
.style('left', function(d, i) {
return positions[i].left + "px";
}).style('top', function(d, i) {
return positions[i].top + "px";
});
div.style('opacity', 0)
.transition().duration(TRANSITION_DURATION).delay(TRANSITION_DURATION * 2)
.style('opacity', 1);
सबसे पहले दूसरी बात मुझे लगता है कि delay
तुलना में एक बेहतर तरीका है। मैंने http://bl.ocks.org/mbostock/3903818 पर देखा है लेकिन मुझे वास्तव में समझ में नहीं आया कि क्या हो रहा है।
इसके अलावा, किसी भी तरह सिर्फ items.exit().transition().duration(TRANSITION_DURATION).remove()
लेखन items
साथ काम नहीं करता, शायद इसलिए कि वे एसवीजी तत्वों लेकिन div
रों नहीं हैं।
अगर मैं गलत हूं तो मुझे सही करें, लेकिन मुझे लगता है कि 'देरी() '-Method का उपयोग करके आपके कोड में एक छोटी सी त्रुटि है। जब कोई अपडेट संक्रमण नहीं होता है (यानी कोई तत्व नहीं बदलता है), 'items.enter() खाली() 'अभी भी' झूठी 'के बराबर है, इसलिए हाथी बाहर निकलें, फिर,' अवधि 'मिलीसेकंड के लिए कुछ भी नहीं होता है, और फिर प्रवेश संक्रमण होता है शुरू होता है। लेकिन अगर कोई दृश्य अद्यतन संक्रमण नहीं हो रहा है, तो मैं प्रवेश संक्रमण से तुरंत बाहर निकलने के लिए * बाहर निकलना चाहता हूं। इस प्रकार मैं अद्यतन संक्रमण को निम्नानुसार सहेजता हूं: – wnstnsmth
'var updateItems = div.transition() । अवधि (अवधि) .delay (! Div.exit() खाली() * अवधि)' और बदलें '.delay ((div.exit() खाली() +! div.enter() खाली()) * अवधि) '' delay ('! div.exit() खाली() +! अद्यतन Items.empty()) * अवधि) '। इस तरह यह आवश्यकतानुसार काम करता है। – wnstnsmth