Tôi đã tạo một cây trong D3.js dựa trên cây nút liên kết của Mike Bostock. Vấn đề tôi có và tôi cũng thấy trong cây của Mike là nhãn văn bản chồng chéo/gạch dưới các nút vòng tròn khi không có đủ không gian thay vì mở rộng các liên kết để rời khỏi một số không gian.Làm thế nào để tránh sự chồng chéo của các yếu tố văn bản trên TreeMap khi các phần tử con được mở trong D3.js?
Là người dùng mới, tôi không được phép tải lên hình ảnh, vì vậy đây là link đến Cây của Mike nơi bạn có thể thấy nhãn của các nút trước chồng chéo các nút sau.
tôi đã cố gắng mọi thứ khác nhau để khắc phục vấn đề bằng cách phát hiện dài điểm ảnh của văn bản với:
d3.select('.nodeText').node().getComputedTextLength();
Tuy nhiên đây chỉ hoạt động sau khi tôi trả lại trang khi tôi cần chiều dài của mặt hàng văn bản dài nhất trước khi tôi render.
Bắt mục văn bản dài nhất trước khi tôi làm với:
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);
});
chỉ trả về độ dài chuỗi, trong khi sử dụng
d.y = (d.depth * 200);
làm cho mỗi liên kết một chiều dài tĩnh và không thay đổi kích thước đẹp khi các nút mới được mở hoặc đóng.
Có cách nào để tránh trùng lặp này không? Nếu vậy, cách tốt nhất để làm điều này và giữ cấu trúc động của cây là gì?
Có 3 giải pháp khả thi mà tôi có thể đưa ra nhưng không phải là đơn giản:
- Phát hiện chiều dài nhãn và sử dụng một dấu chấm lửng nơi nó vượt nút con. (làm cho nhãn ít đọc được)
- chia tỷ lệ bố cục động bằng cách phát hiện độ dài nhãn và yêu cầu các liên kết điều chỉnh cho phù hợp. (Điều tốt nhất nhưng có vẻ khó thực hiện)
- chia tỷ lệ phần tử svg và sử dụng thanh cuộn khi nhãn bắt đầu chạy. (không chắc chắn điều này là có thể vì tôi đã làm việc với giả định rằng SVG cần phải có thiết lập chiều cao và chiều rộng)
Rất tiếc, đã quá lâu để phản hồi nhưng tôi không thấy điều này cho đến bây giờ. Cuối cùng tôi chưa bao giờ kết thúc việc khắc phục vấn đề này nhưng cảm ơn câu trả lời của bạn. Tôi sẽ xem liệu tôi có thể tìm mã cũ và thử khắc phục sự cố không. – alengel