私は2つの円のアプローチを好むが、私はg
要素にグループにそれらを思います。その後、ドラッグするとg
要素上で動作し、第二円はg
を拡大するだけである:
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.js"></script>
</head>
<body>
<script>
var boxWidth = 600;
var boxHeight = 400;
var box = d3.select('body')
.append('svg')
.attr('class', 'box')
.attr('width', boxWidth)
.attr('height', boxHeight);
var drag = d3.behavior.drag()
.on('dragstart', function() {
circle.style('fill', 'red');
})
.on('drag', function() {
d3.select(this)
.attr('transform', function(d) {
return "translate(" + d3.event.x + "," + d3.event.y + ")";
});
})
.on('dragend', function() {
circle.style('fill', 'black');
});
var dragCircles = box.selectAll('.draggableCircle')
.data([{
x: (boxWidth/2),
y: (boxHeight/2),
r: 25
}])
.enter()
.append('g')
.attr('class', 'draggableCircle')
.attr('transform', function(d) {
return "translate(" + d.x + "," + d.y + ")";
})
.style('cursor', 'crosshair')
.call(drag);
dragCircles.append("circle")
.attr('r', function(d){
return d.r * 3;
})
.style('fill', 'transparent');
var circle = dragCircles.append("circle")
.attr('r', function(d) {
return d.r;
})
.style('fill', 'black');
</script>
</body>
</html>
また、私は1つの以上の質問にはお邪魔でしょう - 複数の円がある場合は、と私コードは私にd3.select(this)の親オブジェクト "g"を与えます。そこから可視円をどのように参照して変更できますか?それを親オブジェクトの子として参照できますか? –
@CindyAlmighty 'this.children'は' g 'の中の円の集合です。したがって、 'd3.select(this.children [1])'は第2の可視円の選択になります。 – Mark