2014-01-27 4 views
2

저는 KineticJS를 처음 접했고 별도의 앵커를 사용하여 정의 된 중심점을 중심으로 이미지를 회전하고 이미지화하기 위해 앵커를 사용하려고합니다.KineticJS : 앵커를 사용하여 오프셋 및 회전 정의하기

나는 회전이 작동하고 회전 중심도 정의됩니다. 그러나 사용자가 앵커를 드래그하여 회전 중심을 정의하면 setOffset() 함수를 사용하면 이미지가 앵커 대신 이동합니다.

사용자가 앵커를 드래그하고 앵커가 움직일 수있는 방법이 있는지 궁금 해서요. 앵커를 드래그하고 이미지가 움직이는 대신 사용자가 오프셋을 설정합니까? 나는 또한 드래그하면 크기 조정에 sthe에게 회전 중심을 이미지의 네 모서리를 업데이트하기 위해 노력하고있어

function update(group, activeAnchor) { 
var topLeft = group.get(".topLeft")[0]; 
var topRight = group.get(".topRight")[0]; 
var bottomRight = group.get(".bottomRight")[0]; 
var bottomLeft = group.get(".bottomLeft")[0]; 
var centre = group.get(".centre")[0]; 
var image = group.get(".image")[0]; 

var anchorX = activeAnchor.getX(); 
var anchorY = activeAnchor.getY(); 

var centreX = group.getOffsetX(); 
var centreY = group.getOffsetY(); 

var width = group.getWidth(); 
var height = group.getHeight(); 
// update anchor positions 
switch (activeAnchor.getName()) { 
    case 'topLeft': 
      topRight.setY(anchorY); 
      bottomLeft.setX(anchorX); 
      centreX = topLeft.getX()/2; 
      centreY = topLeft.getY()/2; 
      break; 

    case 'topRight': 
      topLeft.setY(anchorY); 
      bottomRight.setX(anchorX); 
      centreX = topRight.getX()/2; 
      centreY = topRight.getY()/2; 
      break; 

    case 'bottomRight': 
      bottomLeft.setY(anchorY); 
      topRight.setX(anchorX); 
      break; 

    case 'bottomLeft': 
      bottomRight.setY(anchorY); 
      topLeft.setX(anchorX); 

      centre.setX(centreX); 
      centre.setY(centreY); 
      break; 

    case "centre": 
      var absolute = group.getPosition(); 
      group.setOffset(anchorX, anchorY); 
      group.setPosition(absolute); 
    } 

image.setPosition(topLeft.attrs.x, topLeft.attrs.y); 

var width = topRight.attrs.x - topLeft.attrs.x; 
var height = bottomLeft.attrs.y - topLeft.attrs.y; 
if(width && height) { 
    image.setSize(width, height); 
} 
} 

을 다음과 같이

업데이트 기능입니다. 어떤 생각을 어떻게 할 것인가?

미리 감사드립니다.

UPDATE

바이올린 : http://jsfiddle.net/njPdr/은 (는 제대로 여기에 작동하지 않을 수 있습니다하지만 당신은 내가 여기서 뭘하려고하고 무엇을 볼 수 있습니다) 당신이 이미지의 위치를 ​​설정하는

답변

0

: image.setPosition(topLeft.attrs.x, topLeft.attrs.y);

image.setOffset(youroffsetx, youroffsety);으로 대체하면 더 이상 이미지가 움직이지 않으므로 원하는대로 오프셋을 설정합니다. 두 번째 질문에 대해서는 오프셋이 회전 중심이라는 것을 기억하십시오. 주석에 설명 된대로

편집 :

case "centre": 
      var absolute = group.getPosition(); 
      group.setOffset(anchorX, anchorY); 
      group.setPosition({x:absolute.x + group.getOffsetX(), y:absolute.y + group.getOffsetY()}); 
    } 
+0

안녕하세요. 도움 주셔서 감사하지만 불행히도 그것은 작동하지 않습니다. 이미지는 그룹의 일부이며 image.setPosition은 크기 조정을 위해 그룹 내에 이미지 (네 개의 앵커)가 있어야합니다. image.setPosition이 제거되고 image.setOffset으로 바뀌면 그룹을 드래그하면 이미지가 스테이지의 왼쪽 상단에 남아 있습니다. – jdor12345

+0

안녕하세요, 문제를 볼 수 있도록 jsfiddle을 보내 주시겠습니까? – Arioch

+0

http://jsfiddle.net/njPdr/3 이것은 완전한 구현입니다. 그것은 바이올린에서 제대로 작동하지 않을 수 있지만 내가 뭘하려고하는지 보게됩니다. 인코딩이나 아무것도 작동하지 않습니다. js의 복사본은 javascript 섹션에 있지만 js는 kinetic.js의 외부 리소스 아래 html에서 볼 수있는 외부 사이트에서 사용됩니다. – jdor12345

관련 문제