最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Drag a Line in d3 - Stack Overflow

programmeradmin1浏览0评论

I've created a line in d3, which I want to drag around.

var line = d3.select("svg")
              .append("line")
              .attr("x1",10)
              .attr("y1",10)
              .attr("x2",200)
              .attr("y2",200)
              .attr("stroke-width",10)
              .attr("stroke","black")
              .call(drag);

The problem I have right now, is how to move both Points (x1,y1) (x2,y2) from the line relative to my mouse position, as I probably will need the dragstart mouse position as well.

let drag = d3.behavior.drag()
           .on('dragstart', null)
           .on('drag', function(){
             // move circle
             let x1New = d3.select(this).attr('x1')+ ???;
             let y1New = d3.select(this).attr('y1')+ ???;
             let x2New = d3.select(this).attr('x2')+ ???;
             let y2New = d3.select(this).attr('y2')+ ???;
             line.attr("x1",x1New)
                 .attr("y1",y1New)
                 .attr("x2",x2New)
                 .attr("y2",y2New);
             })
           .on('dragend', function(){
           }); 

I hope you can help me with that.

I've created a line in d3, which I want to drag around.

var line = d3.select("svg")
              .append("line")
              .attr("x1",10)
              .attr("y1",10)
              .attr("x2",200)
              .attr("y2",200)
              .attr("stroke-width",10)
              .attr("stroke","black")
              .call(drag);

The problem I have right now, is how to move both Points (x1,y1) (x2,y2) from the line relative to my mouse position, as I probably will need the dragstart mouse position as well.

let drag = d3.behavior.drag()
           .on('dragstart', null)
           .on('drag', function(){
             // move circle
             let x1New = d3.select(this).attr('x1')+ ???;
             let y1New = d3.select(this).attr('y1')+ ???;
             let x2New = d3.select(this).attr('x2')+ ???;
             let y2New = d3.select(this).attr('y2')+ ???;
             line.attr("x1",x1New)
                 .attr("y1",y1New)
                 .attr("x2",x2New)
                 .attr("y2",y2New);
             })
           .on('dragend', function(){
           }); 

I hope you can help me with that.

Share Improve this question asked May 14, 2016 at 9:18 Anh Tuan NguyenAnh Tuan Nguyen 9793 gold badges13 silver badges28 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 5

Do it like this inside your drag function:

.on('drag', function(d){
             // move circle
             var dx = d3.event.dx;//this will give the delta x moved by drag
             var dy = d3.event.dy;//this will give the delta y moved by drag
             var x1New = parseFloat(d3.select(this).attr('x1'))+ dx;
             var y1New = parseFloat(d3.select(this).attr('y1'))+ dy;
             var x2New = parseFloat(d3.select(this).attr('x2'))+ dx;
             var y2New = parseFloat(d3.select(this).attr('y2'))+ dy;
             line.attr("x1",x1New)
                 .attr("y1",y1New)
                 .attr("x2",x2New)
                 .attr("y2",y2New);
             }).on('dragend', function(){
           }); 

working code here

发布评论

评论列表(0)

  1. 暂无评论