JSFiddle - React, Tailwind, and code Playground
by Rajagopal CR
HTML
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.4.9/d3.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone.js"></script>
<button onclick="changeStyle()">Change Style</button>
JavaScript
var width=500;
var height=500;
var radius=800;
var svgcontainer=d3.select("body").append("svg")
.attr("width",width)
.attr("height",height)
.append("g").attr("id","container")
.attr("transform","translate(100,500)");
var json={"name":"Main","children":[{"name":"sub1"},{"name":"sub2"},{"name":"sub3"},{"name":"sub4"},{"name":"sub5"}]};
var partition=d3.layout.partition().size([Math.PI/2, radius]).value(function (d) { return d.depth; });
var node=partition.nodes(json);
var arc=d3.svg.arc()
.startAngle(function (d) {return d.x;})
.endAngle(function (d) { return d.x + d.dx - 0.01 / (d.depth + 2.6); })
.innerRadius(function (d) {return radius / 5 * d.depth;})
.outerRadius(function (d) {return radius / 5 * (d.depth + 1) - 1;});
var paths=svgcontainer.selectAll("path")
.data(node)
.enter()
.append("path")
.attr("d",arc)
.style("fill","red")
.style("opacity", 1)
.on("click",changeStyle)
.style("stroke","#c8c8c8");
svgcontainer.selectAll("text")
.data(node)
.enter()
.append("svg:text")
.attr("transform", function(d) { return "translate("+arc.centroid(d)+")rotate(" + (d.x + d.dx / 2 - Math.PI / 2) / Math.PI * 180 + ")"})
.attr("text-anchor","middle")
.text(names);
function changeStyle(){
paths.transition()
.duration(750)
.attrTween("d", arcTween(d));
}
function arcTween(d) {
var my = maxY(d),
xd = d3.interpolate(x.domain(), [d.x, d.x + d.dx]),
yd = d3.interpolate(y.domain(), [d.y, my]),
yr = d3.interpolate(y.range(), [d.y ? 20 : 0, radius]);
return function(d) {
return function(t) { x.domain(xd(t)); y.domain(yd(t)).range(yr(t)); return arc(d); };
};
}
function names(d){
return...