Я предполагаю, что вы работаете с примером Джейсона Дэвиса.
Соответствующий код из его сценария
function click(d) {
path.transition()
.duration(duration)
.attrTween("d", arcTween(d));
// Somewhat of a hack as we rely on arcTween updating the scales.
text.style("visibility", function(e) {
return isParentOf(d, e) ? null : d3.select(this).style("visibility");
})
.transition()
.duration(duration)
.attrTween("text-anchor", function(d) {
return function() {
return x(d.x + d.dx / 2) > Math.PI ? "end" : "start";
};
})
.attrTween("transform", function(d) {
var multiline = (d.name || "").split(" ").length > 1;
return function() {
var angle = x(d.x + d.dx / 2) * 180 / Math.PI - 90,
rotate = angle + (multiline ? -.5 : 0);
return "rotate(" + rotate + ")translate("
+ (y(d.y) + padding) + ")rotate("
+ (angle > 90 ? -180 : 0) + ")";
};
})
.style("fill-opacity", function(e) {
return isParentOf(d, e) ? 1 : 1e-6;
})
.each("end", function(e) {
d3.select(this).style("visibility",
isParentOf(d, e) ? null : "hidden");
});
}
Обратите внимание, как некоторые из этих функций ссылаются на два разных объекта данных, d
и e
. Это потому, что, если он не маскируется внутренней функцией, d
внутри функции щелчка является объектом данных элемента, по которому щелкнули, — того, который становится центром круга.
Если он дает внутренней функции другое имя для объекта данных (function(e){}
), то это объект данных, связанный с отдельным элементом, атрибуты которого изменены. Таким образом, он может вызывать функции, которые сравнивают два объекта данных, чтобы определить, должен ли данный элемент быть скрыт или нет на этом уровне масштабирования.
Вы хотите сделать то же самое, за исключением того, что вы не только скрываете текст, если он является родителем центрального колеса, вы также скрываете его, если он является слишком глубоким потомком. Итак, вы хотите что-то вроде:
if (e.depth > d.depth + 3) return "hidden";
То, куда вы добавите этот код, зависит от выбора стиля — Джейсон Дэвис на самом деле меняет непрозрачность или видимость текста в трех точках: видимость устанавливается до и после перехода (во время события «конец»), а между ними непрозрачность исчезает. Вы хотите, чтобы ваши метки появлялись и исчезали одним щелчком мыши, или вы хотите, чтобы они исчезали и появлялись?
person
AmeliaBR
schedule
26.01.2014