w = 1000 h = 500 X = d3.scale.ordinal().domain([90]).rangePoints([0,w],1) Y = d3.scale.ordinal().domain([180]).rangePoints([0,h],2) upper_arc = d3.svg.arc() .innerRadius(95) .outerRadius(105) .startAngle(0) .endAngle(Math.PI) icon_center = [ upper_arc.centroid()[0] + X(upper_arc.centroid()[0]) , upper_arc.centroid()[1] + Y(upper_arc.centroid()[1]) ] svg = d3.select("#chart").append("svg") .attr("width", w) .attr("height", h) g = svg.append("g").attr("class","hit-group") g.append("circle") .attr("id", "hit-box") .attr("fill", "#FFF") .attr("cx", X) .attr("cy", Y) .attr("r", 105) .attr("transform", "translate(103,0)") g.append("path") .attr("d", upper_arc) .attr("stroke", "#000") .attr("stroke-width", 2) .attr("id","upper") .attr("transform", "translate(#{icon_center})") g.append("path") .attr("d", upper_arc) .attr("stroke", "#000") .attr("stroke-width", 2) .attr("id","lower") .attr("transform","rotate(180, #{icon_center})translate(#{icon_center})") g.append("svg:line") .attr("id", "bar") .attr("x1", 82) .attr("y1", 82) .attr("x2", -82) .attr("y2", -82) .attr("stroke","#000") .attr("stroke-width", 15) .attr("transform", "rotate(90,#{icon_center})translate(#{icon_center})") bar_rotation = 135 arc_rotation = 90 hell = false d3.select(".hit-group").on "mouseover", -> d3.select("#bar") .transition().duration(1000) .attr("transform", "rotate(#{bar_rotation}, #{icon_center})translate(#{icon_center})") .transition() .delay(1000) .attr("x1", 220) .attr("y1", 220) .attr("x2", -220) .attr("y2", -220) .attr("stroke","#000") .attr("stroke-width", 30) if hell == false d3.select("#chart").append("ul").transition().delay(2000).attr("id","hell") d3.select("#hell").append("li").text("bitch") hell = true d3.select("#upper") .transition().duration(1000) .attr("fill", "#FC0000") .attr("stroke", "#FC0000") .attr("transform","rotate(#{arc_rotation}, #{icon_center})translate(#{icon_center})") .transition() .delay(1000) .attr("transform", "rotate(#{arc_rotation}, #{icon_center})translate(#{icon_center[0]}, #{icon_center[1] - 200 })") .transition() .duration(500) .delay(2000) .attr("fill", "#FFF") .attr("stroke", "#FFF") d3.select("#lower") .transition().duration(1000) .attr("fill", "#FC0000") .attr("stroke", "#FC0000") .attr("transform","rotate(-#{arc_rotation}, #{icon_center})translate(#{icon_center})") .transition() .delay(1000) .attr("transform", "rotate(-#{arc_rotation}, #{icon_center})translate(#{icon_center[0]}, #{icon_center[1] - 200 })") .transition() .duration(500) .delay(2000) .attr("fill", "#FFF") .attr("stroke", "#FFF") d3.select(".hit-group").on "mouseout", -> d3.select("#hell").remove() d3.select("#bar") .transition().duration(1000) .attr("transform", "rotate(90, #{icon_center})translate(#{icon_center})") .transition().duration(500) .delay(1000) .attr("x1", 82) .attr("y1", 82) .attr("x2", -82) .attr("y2", -82) .attr("stroke","#000") .attr("stroke-width", 15) d3.select("#upper") .transition().duration(1000) .attr("fill", "#FC0000") .attr("stroke", "#FC0000") .attr("transform","rotate(45, #{icon_center})translate(#{icon_center})") .transition() .duration(1000) .delay(1000) .attr("fill", "#000") .attr("stroke", "#000") d3.select("#lower") .transition().duration(1000) .attr("fill", "#FC0000") .attr("stroke", "#FC0000") .attr("transform","rotate(225, #{icon_center})translate(#{icon_center})") .transition() .duration(1000) .delay(1000) .attr("fill", "#000") .attr("stroke", "#000")