To draw a rectangle around the text when clicked, update the code to:
var svgcanvas = d3.select('svg'); $("#xc").on("click", function (d) { var selection = d3.select(this); var rect = this.getBBox(); var offset = 2; // enlarge rect box 2 px on left & right side selection.classed("mute", (selection.classed("mute") ? false : true)); pathinfo = [ {x: rect.x-offset, y: rect.y }, {x: rect.x+offset + rect.width, y: rect.y}, {x: rect.x+offset + rect.width, y: rect.y + rect.height }, {x: rect.x-offset, y: rect.y + rect.height}, {x: rect.x-offset, y: rect.y }, ]; // Specify the function for generating path data var d3line = d3.svg.line() .x(function(d){return dx;}) .y(function(d){return dy;}) .interpolate("linear"); // Draw the line svgcanvas.append("svg:path") .attr("d", d3line(pathinfo)) .style("stroke-width", 1) .style("stroke", "red") .style("fill", "none"); })
In this html:
<!DOCTYPE html> <html> <head> <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script> </head> <body> <svg width="720" height="720"> <text x="37.5" y="37.5" id="xc">X</text> </svg> </body> </html>
Alvin K.
source share