簡體   English   中英

在d3中拖動一條線

[英]Drag a Line in d3

我在d3中創建了一條線,我想拖拽它。

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);

我現在遇到的問題是如何從相對於我的鼠標位置的線移動點(x1,y1)(x2,y2),因為我可能也需要dragstart鼠標位置。

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(){
           }); 

我希望你能幫助我。

在你的拖拽功能中這樣做:

.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(){
           }); 

這里工作代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM