Здесь я создаю прямоугольник с именем resize_icon в другом прямоугольнике, позиционирующем его в правом нижнем углу большого прямоугольника. Я хочу, чтобы этот прямоугольник resize_icon был перемещен свободно в большом прямоугольнике, но он не должен пересекать верхний край больших прямоугольников и его левый но можно перетащить в другое место. resize [] - это массив, который содержит id, x и y позицию прямоугольника resize_icon. Пожалуйста, посмотрите следующий код перетаскивания и, пожалуйста, скажите, почему он не работает. Также, если кто-то может предложить правильный код, он будет действительно полезен.Как перетащить прямоугольник svg в d3.js?
c.append('rect').attr('class','resize_icon').attr('fill','#000')
.attr('id','resize_icon'+i).attr('height',5).attr('width',5)
.attr('x', x+wd+35).attr('y',y+rectHeight-5).on(drag1)
.on('click',function(){
d3.selectAll(".selected").classed("selected",false);
d3.select(this.parentNode).classed("selected",true);
resize_rect(i);
});
var drag1 = d3.behavior.drag().origin(function()
{
var t = d3.select(this);
return {x: t.attr("x"), y: t.attr("y")};
})
.on("dragstart", dragstart)
.on("drag", dragon)
.on("dragend", dragstop);
function dragstart() {
d3.event.sourceEvent.stopPropagation();
d3.select(this).classed("drag", true);
}
function dragon() {
d3.select(this).select('.resize_icon')
.attr("x", d3.event.x)
.attr("y", d3.event.y);
id = d3.select(this).select('.resize_icon').attr("id");
a = id.replace("resize_icon", "");
resize[a].x = d3.event.x;
resize[a].y = d3.event.y;
}
function dragstop() {
d3.select(this).classed("drag", false);
}
PS убедитесь вы выбираете что-то должным образом. Посмотрите селектора CSS, если вы не уверены. '#' для ID и '.' для классов. :) –
AJ_91 Спасибо, сэр ... Спасибо вам очень много .. Вы действительно решили мою проблему .. Большое спасибо вам еще раз .. :) :) :) – Abhijit
не беспокоится :) рад, что я мог бы помочь –