javascript - 使用 d3.js 在 svg 上创建关闭按钮

标签 javascript svg d3.js

我是 d3.js 的新手,我需要在矩形的右上角创建一个关闭按钮 [x]。单击按钮后,应从图表中删除该矩形。
我正在考虑使用svg remove按照链接内容中的建议。
我目前使用字母 X 作为关闭按钮。然而,这个实现似乎不起作用,字母不可见(尽管出现在 DOM 上)。

bl.ocks 链接在这里:http://bl.ocks.org/bhandarisumit/b48e134e358f94a290a2

代码:

var margin = {top: 15, right: 40, bottom: 20, left: 50},
    width = 960 - margin.left - margin.right,
    height = 240 - margin.top - margin.bottom;


var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");


var clip = svg.append("defs").append("svg:clipPath")
.attr("id", "clip")
.append("svg:rect")
.attr("id", "clip-rect")
.attr("x", "0")
.attr("y", "0")
.attr("width", width)
.attr("height", height);

var chartBody = svg.append("g")
.attr("clip-path", "url(#clip)");

var rect = chartBody.append('svg:rect')
.attr('width', width-20)
.attr('height', height-20)
.attr('fill', 'white');


var labeledRect = chartBody.append("rect")
.attr("x", 0)
.attr("y", 0)
.attr("height", height-20)
.attr("width", width-20)
.style("stroke", "red")
.attr("class", "labelbox")
.style("fill", "none");

var closeArea = chartBody.append('text')
.text('X')
.attr("font-family", "sans-serif")
.attr("font-size", "20px")
.attr("fill", "red");
labeledRect.append('text').attr('color','black').text('X');
body {
  font: 10px sans-serif;
}

.axis path,
.axis line {
  fill: none;
  stroke: #000;
  shape-rendering: crispEdges;
}

.x.axis path {
  display: none;
}

.line {
  fill: none;
  stroke: steelblue;
  stroke-width: 2px;
}

rect {
  fill: #fff;
}
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.2/d3.js"></script>

最佳答案

字母“X”位于“rect”元素区域之外,因此不可见。
'text' 元素的位置有 'x' 和 'y' 属性(默认 0),
但坐标表示的是文本左下角的位置。
因此,如果不设置 'y' 属性,文本将不可见,因为 'y' 为 0。
我在您的代码中插入了一行 .attr("y", 20) 。请尝试这个。

var closeArea = chartBody.append('text')
.text('X')
.attr("y", 20)
.attr("font-family", "sans-serif")
.attr("font-size", "20px")
.attr("fill", "red");

替代解决方案是使用 dominant-baseline 属性,如下所示:

var closeArea = chartBody.append('text')
.text('X')
.attr("dominant-baseline","text-before-edge")
.attr("font-family", "sans-serif")
.attr("font-size", "20px")
.attr("fill", "red");

关于javascript - 使用 d3.js 在 svg 上创建关闭按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27518293/

相关文章:

javascript - 获取 .attrs 方法内 d3 中文本节点的宽度

javascript - D3 具有相同颜色点的多折线图

javascript - 如何处理 javascript 作用域

javascript - 将选择框更改为自动完成 jquery source php echo

javascript - 如何在javascript中提取子字符串

javascript - 当 promise 在 javascript 中产生时会发生什么?

javascript - 为什么很难将 SVG 转换为 PDF 客户端,PDF 不是矢量格式吗?

javascript - 单击 svg poly 更改填充属性

javascript - 用 D3 和 d3.slider 显示 SVG 元素 : Uncaught TypeError: . exit 不是函数

javascript - 将变量从 Express 传递到客户端 JavaScript