2016-07-26 18 views
2

v3では、マウスの位置/要素の座標オフセットによる目立つジャンプを防ぐためドラッグ元を使用しました。起点機能が削除されているため、v4に代替案がありますか?d3ドラッグ元の回避策

var drag1 = d3.behavior.drag() 
      .origin(function() { 
       var t = d3.select(this); 
       return { 
        x: t.attr("x") + d3.transform(t.attr("transform")).translate[0], 
        y: t.attr("y") + d3.transform(t.attr("transform")).translate[1] 
       }; 
      }) 
      .on("drag", function (d, i) { 
       d3.select(this).attr("transform", function (d, i) { 
        return "translate(" + [d3.event.x, d3.event.y] + ")" 
       }) 
      }); 

    var drag2 = d3.behavior.drag() 
      .origin(function() { 
       var t = d3.select(this); 
       return { x: t.attr("x"), y: t.attr("y") }; 
      }) 
      .on("drag", function (d, i) { 
       d3.select(this) 
       .attr("x", d3.event.x) 
       .attr("y", d3.event.y); 
      }); 
+0

をおそらく、あなたは 'start'イベントをドラッグして耳を傾けなければならない、とそこイベントのx、y座標をつかみますか? cf. [参考](https://github.com/d3/d3-drag#drag-events) –

答えて

5

これは働いていた:

var drag = d3.drag() 
    .subject(subject) 
    .on("start", function() { 
     d3.event.sourceEvent.stopPropagation(); // silence other listeners 
     if (d3.event.sourceEvent.which == 1) 
      dragInitiated = true; 
    }) 


function subject(d) {return { x: 0, y: d3.event.y }}; 
+0

はい、ありがとう...同じ答えは少し違ってAPIの変更に気づいたhttp://stackoverflow.com/questions/38650637/ d3-js-in-v4をドラッグする際の原点セットの方法 – headwinds

+0

"x:0"の件名はなぜですか?この答えでは、「x:d3.event.x」がより適切です。とにかくおかげさまで、私はドラッグオブジェクトにマウスをオフセットで夢中になっていた... – jgpATs2w