2013-01-18 5 views
3

d3.js 강제 레이아웃에서 드래그를 활성화 할 수 있습니다. 원을 드래그하고 마우스 버튼을 놓으면,이 같은 콜백을 통해 특정 함수를 호출 할 : 불행하게도 이벤트가 발생되지 않습니다 포스 레이아웃에서 드래그하면 다른 마우스 업 리스너가 생기지 않습니다.

this.force = d3.layout.force() 
    .nodes(this.nodes) 
    .size([this.width, this.height]); 

// enable dragging 
this.circle 
    .call(this.force.drag) 
    .on("dragend", function() { 
     console.log("You should see this, when releasing a circle."); 
    }) 
    .on("mouseup.drag",function(d,i) { 
     console.log("Or see this."); 
    }); 

/를 force.drag 핸들러가 완전히 소모. 그러면 드래그가 끝날 때 d3 force 레이아웃에서 주어진 콜백 함수를 어떻게 수행 할 수 있습니까?

답변

3

여기 "dragend" 이벤트는 this.force.drag으로 전화하지 않습니다. 이것은 또한 사용자가 this.force.drag을 정의한 방법에 따라 다릅니다. 당신이

myCustomDrag = d3.behavior.drag() 
    .on("dragstart", function(d,i){ 
     //do something when drag has just started 
    }) 
    .on("drag", function(d,i){ 
     //do something while dragging 
    }) 
    .on("dragend", function(d,i){ 
     //do something just after drag has ended 
    }); 

위의 코드에서, 단지 요소 (여기 원)하는이 드래그 동작이 존재 할에 call(myCustomDrag)를 사용하기위한

이 작동합니다.

+0

'this.force.drag '는 d3 라이브러리에서 나오고 있으며 사용자 정의가 아닙니다. [이 답변] (http://stackoverflow.com/a/11867374/295686) 가까이 도착하지만, 나는 그것이 계속 찾고있는 이유가 작동하지 않습니다. – mlhDev

+0

예, d3 라이브러리에서 가져 왔지만 항상 무시할 수 있습니다. 위에서 언급 한 대답은 위의 코드를 작성하는 또 다른 방법 일뿐입니다. – arunkjn

+0

나는 당신이 여기있는 것을 더 많거나 적은 일을 끝내었다. +1 – mlhDev