Javascript 保持在形状D3内拖动-ReactJS

Javascript 保持在形状D3内拖动-ReactJS,javascript,html,css,d3.js,Javascript,Html,Css,D3.js,我正在尝试使用d3来处理可拖动的形状,通过特别地遵循和其他一些方法,我能够得到这样的东西 var svg=d3.选择(“svg”), 宽度=+svg.attr(“宽度”), 高度=+svg.attr(“高度”), 半径=32; var circles=d3.range(20.map)(函数(){ 返回{ x:Math.round(Math.random()*(宽度-半径*2)+半径), y:Math.round(Math.random()*(高度-半径*2)+半径) }; }); var co

我正在尝试使用d3来处理可拖动的形状,通过特别地遵循和其他一些方法,我能够得到这样的东西

var svg=d3.选择(“svg”),
宽度=+svg.attr(“宽度”),
高度=+svg.attr(“高度”),
半径=32;
var circles=d3.range(20.map)(函数(){
返回{
x:Math.round(Math.random()*(宽度-半径*2)+半径),
y:Math.round(Math.random()*(高度-半径*2)+半径)
};
});
var color=d3.scaleOrdinal()
.范围(d3.SchemeCategory 20);
var circleGroup=svg.selectAll('g')
.数据(圆圈)
.enter().append('g')
.attr('transform',函数(d){return'translate('+d.x+','+d.y+');})
.call(d3.drag()
.on(“开始”,拖动开始)
.打开(“拖动”,拖动)
。在(“结束”,dragended));
circleGroup.append(“圆”)
.attr(“r”,半径)
.style(“填充”,函数(d,i){返回颜色(i);})
circleGroup.append(“文本”)
.text(函数(d,i){return i;})
.style('text-anchor','middle')
.attr('y',4);
函数dragstarted(d){
d3.选择(this).raise().classed(“活动”,true);
}
函数(d){
d3.select(this.attr)(“transform”,“translate”(+(d.x=d3.event.x)+',“+(d.y=d3.event.y)+”);
}
函数d(d){
d3.选择(此).classed(“活动”,false);
}
.svgClass{
边框:2倍纯红;
}

更新您的拖动()函数,强制转换效果中的最大值和最小值

函数拖动(d){
常数
xMax=宽度-半径,
yMax=高度-半径
常数x=
d3.事件x<半径?半径
:d3.event.x>xMax?xMax
:d3.event.x
常数=
d3.事件y<半径?半径
:d3.event.y>yMax?yMax
:d3.event.y
d3.选择(this).attr(“transform”,“translate”(+(d.x=x)+','+(d.y=y)+');
}
var svg=d3.选择(“svg”),
宽度=+svg.attr(“宽度”),
高度=+svg.attr(“高度”),
半径=32;
var circles=d3.range(20.map)(函数(){
返回{
x:Math.round(Math.random()*(宽度-半径*2)+半径),
y:Math.round(Math.random()*(高度-半径*2)+半径)
};
});
var color=d3.scaleOrdinal()
.范围(d3.SchemeCategory 20);
var circleGroup=svg.selectAll('g')
.数据(圆圈)
.enter().append('g')
.attr('transform',函数(d){return'translate('+d.x+','+d.y+');})
.call(d3.drag()
.on(“开始”,拖动开始)
.打开(“拖动”,拖动)
。在(“结束”,dragended));
circleGroup.append(“圆”)
.attr(“r”,半径)
.style(“填充”,函数(d,i){返回颜色(i);})
circleGroup.append(“文本”)
.text(函数(d,i){return i;})
.style('text-anchor','middle')
.attr('y',4);
函数dragstarted(d){
d3.选择(this).raise().classed(“活动”,true);
}
函数(d){
常数
xMax=宽度-半径,
yMax=高度-半径
常数x=
d3.事件x<半径?半径
:d3.event.x>xMax?xMax
:d3.event.x
常数=
d3.事件y<半径?半径
:d3.event.y>yMax?yMax
:d3.event.y
d3.选择(this).attr(“transform”,“translate”(+(d.x=x)+','+(d.y=y)+');
}
函数d(d){
d3.选择(此).classed(“活动”,false);
}
.svgClass{
边框:2倍纯红;
}

更新您的拖动()函数,强制转换效果中的最大值和最小值

函数拖动(d){
常数
xMax=宽度-半径,
yMax=高度-半径
常数x=
d3.事件x<半径?半径
:d3.event.x>xMax?xMax
:d3.event.x
常数=
d3.事件y<半径?半径
:d3.event.y>yMax?yMax
:d3.event.y
d3.选择(this).attr(“transform”,“translate”(+(d.x=x)+','+(d.y=y)+');
}
var svg=d3.选择(“svg”),
宽度=+svg.attr(“宽度”),
高度=+svg.attr(“高度”),
半径=32;
var circles=d3.range(20.map)(函数(){
返回{
x:Math.round(Math.random()*(宽度-半径*2)+半径),
y:Math.round(Math.random()*(高度-半径*2)+半径)
};
});
var color=d3.scaleOrdinal()
.范围(d3.SchemeCategory 20);
var circleGroup=svg.selectAll('g')
.数据(圆圈)
.enter().append('g')
.attr('transform',函数(d){return'translate('+d.x+','+d.y+');})
.call(d3.drag()
.on(“开始”,拖动开始)
.打开(“拖动”,拖动)
。在(“结束”,dragended));
circleGroup.append(“圆”)
.attr(“r”,半径)
.style(“填充”,函数(d,i){返回颜色(i);})
circleGroup.append(“文本”)
.text(函数(d,i){return i;})
.style('text-anchor','middle')
.attr('y',4);
函数dragstarted(d){
d3.选择(this).raise().classed(“活动”,true);
}
函数(d){
常数
xMax=宽度-半径,
yMax=高度-半径
常数x=
d3.事件x<半径?半径
:d3.event.x>xMax?xMax
:d3.event.x
常数=
d3.事件y<半径?半径
:d3.event.y>yMax?yMax
:d3.event.y
d3.选择(this).attr(“transform”,“translate”(+(d.x=x)+','+(d.y=y)+');
}
函数d(d){
d3.选择(此).classed(“活动”,false);
}
.svgClass{
边框:2倍纯红;
}


hi,因此您希望仅在svg边界内拖动圆。是吗?是的,我只想在svghi的边界内拖动,所以你只想在svg的边界内拖动圆。是吗?是的,我只想在svgHow的边界内拖动来定义rad