2012-12-23 3 views
4

사용자가 마우스 커서를 다각형의 윤곽선 위에 놓으면 앵커가 나타나고 마우스 위치를 따라 가면서 다각형의 윤곽에 스냅해야합니다.KineticJS에서 서클의 깜박임 방지

문제점 :mousemove 처리기 함수가이 앵커의 위치를 ​​업데이트하면 앵커가 깜박입니다. 깜박임과 느린 업데이트의 원인은 무엇입니까? KineticJS 예제 here은 꽤 빨리 업데이트됩니다.

또한 앵커가 다각형의 윤곽선/획에 스냅되지 않습니다. 이 효과는 어떻게 달성 될 수 있습니까?

JSfiddle

답변

0

귀하의 mousemove 기능은 앵커를 이동합니다. 앵커가 움직이면 마우스는 더 이상 polyHitArea을 넘지 않으므로 mouseleave 이벤트가 발생하여 앵커가 숨어 있습니다. 그리고 mouseoverAnchor 전화 clearTimeoutmouseenter 이벤트가 -

편집

나는 이런 일이 발생을 방지하기 위해 왼손 생각할 수있는 가장 좋은 방법은 setTimeout 전화로 setVisible(false) 코드를 삽입하는 것입니다.

var polyHitArea._timeout = 0; 

polyHitArea.on('mouseover', function(e) { 
    clearTiemout(polyHitArea._timeout); 
    mouseoverAnchor.setVisible(true); 
    stage.draw(); 
}); 

polyHitArea.on('mouseleave', function(e) { 
    clearTimeout(polyHitArea._timeout); 
    polyHitArea._timeout = setTimeout(function(){ 
     mouseoverAnchor.setVisible(false); 
    }, 25); // 25 ms enough time? 
    stage.draw(); 
}); 

mouseoverAnchor.on('mouseenter', function(e) { 
    clearTimeout(polyHitArea._timeout); 
}); 
+0

많은 의미가 있습니다. 앵커가'mouseleave' 이벤트를 트리거하지 못하게하는 방법이 있습니까? 나는'mouseout'을 시도하고 같은 문제를 겪는다. – Nyxynyx

+0

제이슨에게 감사드립니다. 나는 그것을 시도하고 깜박임이 멈추지 만 앵커는 사각형의 가장자리를 따라 마우스를 움직일 때 마우스 위치를 따르지 않습니다. 앵커는 마우스가 앵커를 빠져 나올 때만 위치를 업데이트하며, 마우스 위치를 부드럽게 추적하지만 사각형의 가장자리에 구속 된 앵커를 원합니다. jsfiddle.net/yZFFJ/8 – Nyxynyx

+0

캔버스 자체에'mousemove' 이벤트를 넣고 필요한 모든 계산을 수행해야하는 것처럼 들리네요 (경계 입력, 경계선 남기기, 앵커 표시 여부 및 위치 지정)). –