2016-07-26 2 views
2

v3에서는 드래그 원점을 사용하여 마우스 위치/요소 좌표 오프셋으로 인해 눈에 띄게 점프하는 것을 방지했습니다. 원본 기능이 제거되었으므로 v4에 대안이 있습니까?d3 드래그 원점에 대한 버전 4의 해결 방법

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가 조정해야합니까? 참조 [참고] (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

관련 문제