“拖动”时,我无法将文本分配给特定元素,即 这不起作用,它会立即更改所有元素。
const svg = d3.select('body').append('svg')
.attr('width', 800)
.attr('height', 400);
const barHeight = 400,
padding = 1,
dataSet = [];
for (let i = 0; i < 20; i++) {
dataSet.push(i)
}
let bars = svg.selectAll('g')
.data(dataSet)
.enter()
.append('g')
.append('rect')
.classed('plot-bar', true)
.attr('y', 0)
.attr('x', (d, i) => i * 30)
.attr('width', 30 - padding)
.attr('height', barHeight);
let text = svg.selectAll("g")
.append('text')
.attr("x", (d, i) => i * 30)
.attr("y", 15)
.text(400);
let dragg = d3.drag()
.on('drag', () => {
let x = d3.event.sourceEvent.x;
bars.each(function() {
let r = this.getBoundingClientRect();
r.x < x && r.width + r.x > x ? d3.select(this).attr('height', d3.event.sourceEvent.y) : false;
})
text.text(d3.event.sourceEvent.y);
})
svg.call(dragg);
.bar {
fill: steelblue;
}
.plot {
border: 2px solid #789;
background-color: burlywood;
}
.plot-bar {
fill: teal;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
您可以为文本标签分配一个类,并通过它搜索它们: