2013-02-26 5 views
6

이 문제를 해결하기 위해 탐색했지만 해결할 최종 해결책이나 예제를 찾지 못했습니다. jQuery를 사용하여 크기 조정이 가능할 때 핸들과 후속 크기 조정 작업이 실행됩니다. 이 문제를 어떻게 해결할 수 있습니까? 여기에 내가 무슨 말의 예는 다음과 같습니다 바이올린의 http://jsfiddle.net/LVU7c/jQuery 회전 요소 크기 조정

코드는 다음과 같습니다

$('#widget').resizable({ handles: 'n, e, s, w' }); 

와 CSS 간단한 div 태그를 90도 회전합니다.

답변

6

이 기본 개념은 Linus Gudn Jokela 님이 올리신 후 답변을 삭제하고 요청에 따라 복원하지 않았습니다.

내용에 회전 된 내부 래퍼를 사용한 다음 회전하지 않은 외부 요소에 크기 조정 핸들을 첨부 할 수 있습니다.

일부 JS 코드는 높이와 너비가 관련된 한 콘텐트와 동기화 된 상태로 유지해야합니다. http://jsfiddle.net/fXthv/

JS :

$('#widget').resizable({ 
    handles: 'n, e, s, w', 
    resize: function(){ 
     correct(this); 
    } 
}); 

function correct(el) { 
    var widget = $('#widget_content'), 
     deg = widget.data("rotate"); 
    if (typeof deg == "number") { 
     widget.css({ 
      width: (function() { 
       if (deg % 180 == 0) return $(el).outerWidth() 
       else return $(el).outerHeight() 
      })(), 
      height: (function() { 
       if (deg % 180 == 0) return $(el).outerHeight() 
       else return $(el).outerWidth() 
      })(), 
      marginLeft: (function() { 
       if (deg % 360 == 90) return $(el).outerWidth(); 
       else if (deg % 360 == 180) return $(el).outerWidth(); 
       else return 0; 
       //else if (deg % 360 == 270) return $(el).outerWidth(); 
      })(), 
      marginTop: (function() { 
       if (deg % 360 == 270) return $(el).outerHeight(); 
       else if (deg % 360 == 180) return $(el).outerHeight(); 
       else return 0; 
       //else if (deg % 360 == 270) return $(el).outerWidth(); 
      })() 
     }); 
    } 
} 

CSS :

#widget { 
    width: 100px; 
    height: 100px; 
    background-color: #cecece; 
} 
#widget_content { 
    margin-left:100px; 
    width: 100px; 
    height: 100px; 
    background-image: url(http://aux.iconpedia.net/uploads/2106003206.png); 
    background-size: 100% 100%; 
    /* removing the styles below will make the image appear as expected */ 
    -webkit-transform-origin: 0 0; 
    -moz-transform-origin: 0 0; 
    -ms-transform-origin: 0 0; 
    -o-transform-origin: 0 0; 
    transform:rotate(90deg); 
    -ms-transform:rotate(90deg); 
    /* IE 9 */ 
    -moz-transform:rotate(90deg); 
    /* Firefox */ 
    -webkit-transform:rotate(90deg); 
    /* Safari and Chrome */ 
    -o-transform:rotate(90deg); 
    /* Opera */ 
} 

HTML :

<div id="widget"> 
    <div id="widget_content"></div> 
</div> 
+0

T 여기에 완전한 데모입니다 모자는 아주 멋진 솔루션입니다. 작은 버그는 div의 크기를 조정할 때마다 상위 요소의 가장자리에 맞지 않는 한 조금씩 올라가고 왼쪽으로 이동한다는 점입니다. div의 위/왼쪽을 축소 한 다음 어느쪽으로부터 크기를 조정하면이 값을 볼 수 있습니다. – ajp15243

+0

@ ajp15243이 브라우저에서 어떤 브라우저를 사용하고 있습니까? FF로 복제 할 수 없습니다 (문제를 재현하는 방법을 오해하고있을 수도 있음) –

+0

최신 안정된 Chrome (v25.0.1364.97)이어야합니다. 나는 또한 Linux를 사용하고 있으며 Gnome3 때문에 의심스러운 작은 레이아웃 문제가 종종 발생하지만 jsFiddle에서는이를 볼 수 없습니다. 그것을 재현하는 것을 더 잘 설명하려면, 위쪽 핸들을 잡고 아래로 드래그 한 다음 왼쪽 핸들을 잡고 오른쪽으로 드래그하십시오. 그런 다음 너무 많이 드래그하지 않고 상자의 위치를 ​​보면서 오른쪽 또는 아래쪽 핸들을 잡고 잡아 당깁니다 (가장 왼쪽 상단 모서리를 볼 수 있는지 확인하는 것이 가장 쉽습니다). – ajp15243

관련 문제