मैंने माइक Bostock के नोड-लिंक पेड़ के आधार पर D3.js में एक वृक्ष बनाया। मेरे पास समस्या है और मैं माइक के पेड़ में भी देखता हूं कि टेक्स्ट लेबल कुछ जगह छोड़ने के लिए लिंक का विस्तार करने के बजाय पर्याप्त स्थान नहीं होने पर सर्कल नोड्स को ओवरलैप/अंडरलैप करता है।ट्रीमैप पर टेक्स्ट तत्वों के ओवरलैपिंग से कैसे बचें जब D3.js में बच्चे तत्व खोले जाते हैं?
एक नए उपयोगकर्ता के रूप में मुझे छवियों को अपलोड करने की अनुमति नहीं है, इसलिए यहां link माइक के पेड़ पर है जहां आप निम्नलिखित नोड्स को ओवरलैप करने वाले पिछले नोड्स के लेबल देख सकते हैं।
मैं विभिन्न चीजों की कोशिश की के साथ पाठ के पिक्सेल लंबाई पता लगाने के द्वारा इस समस्या को ठीक करने के लिए:
d3.select('.nodeText').node().getComputedTextLength();
हालांकि यह केवल काम करता है के बाद मैं पृष्ठ प्रदान की गई है जब मैं मैं पहले सबसे लंबे समय तक पाठ आइटम की लंबाई की जरूरत है प्रस्तुत करना।
nodes = tree.nodes(root).reverse();
var longest = nodes.reduce(function (a, b) {
return a.label.length > b.label.length ? a : b;
});
node = vis.selectAll('g.node').data(nodes, function(d, i){
return d.id || (d.id = ++i);
});
nodes.forEach(function(d) {
d.y = (longest.label.length + 200);
});
केवल स्ट्रिंग की लंबाई देता है, जबकि
d.y = (d.depth * 200);
का उपयोग कर हर एक स्थिर लंबाई लिंक और के रूप में सुंदर जब आकार परिवर्तन नहीं करता है बनाता है:
इससे पहले कि मैं के साथ प्रस्तुत करना सबसे लंबे समय तक पाठ आइटम हो रही है नए नोड्स खोले या बंद हो जाते हैं।
क्या इस ओवरलैपिंग से बचने का कोई तरीका है? यदि हां, तो ऐसा करने और पेड़ की गतिशील संरचना को रखने का सबसे अच्छा तरीका क्या होगा?
3 संभव समाधान है कि मैं के साथ आने लेकिन यह है कि सरल नहीं हैं कर सकते हैं:
- लेबल लंबाई का पता लगा रहा है और एक अंडाकार जहां यह बच्चे नोड्स लगने का उपयोग कर। (जो लेबल को कम पठनीय बना देगा)
- लेबल की लंबाई का पता लगाने और तदनुसार समायोजित करने के लिए लिंक बताकर लेआउट को गतिशील रूप से स्केलिंग। (जो सबसे अच्छा होगा लेकिन वास्तव में मुश्किल लगता है
- svg तत्व स्केल करें और लेबल्स को चलाने के लिए स्क्रॉल बार का उपयोग करें। (सुनिश्चित नहीं है कि यह संभव है क्योंकि मैं इस धारणा पर काम कर रहा हूं कि एसवीजी को एक होना चाहिए ऊंचाई और चौड़ाई निर्धारित करें)
वाह, खेद है कि जवाब देने में इतना समय लगा लेकिन मुझे अब तक यह नहीं देखा। अंत में मैंने कभी भी इस समस्या को ठीक करने का अंत नहीं किया लेकिन आपके उत्तर के लिए धन्यवाद। मैं देखूंगा कि क्या मैं पुराना कोड पा सकता हूं और समस्या को ठीक करने का प्रयास करता हूं। – alengel