jQuery UI Resizable을 사용하여 가로 또는 세로로만 크기를 조정하는 방법은 무엇입니까?


81

내가 찾은 유일한 해결책은 현재 값으로 최대 및 최소 높이 또는 너비를 설정하는 것입니다.

예:

foo.resizable({ 
  maxHeight: foo.height(), 
  minHeight: foo.height() 
});

그러나 이것은 정말 추합니다. 특히 프로그래밍 방식으로 요소의 높이를 변경해야하는 경우 더욱 그렇습니다.

답변:


145

다음 과 같이 왼쪽과 오른쪽 (또는 동쪽 / 서쪽)에만 표시 되도록 크기 조정 handles옵션 을 설정할 수 있습니다 .

foo.resizable({
    handles: 'e, w'
});​

여기에서 시도해 볼 수 있습니다.


7
이 솔루션에 대한 경고를 찾았습니다. 인라인 스타일로 완료되면 여전히 너비와 높이를 입력합니다. 이것은 수직 전용 솔루션으로 나에게 문제를 일으키고 있습니다. 크기를 조정하면 너비가 설정되고 더 이상 100 %가 아닙니다 (그러나 px 값). 다른 사람들이 검색하고 발견하는 경우를 대비하여 여기에 넣으십시오.
Fernker 2014

@Fernker 예, 그것은 고통입니다.
Ben

동일한 값의 최소 너비 및 최대 너비 속성을 div에 제공하면 백분율 너비를 얻을 수 있습니다. 재정의되지 않습니다. :)
Sébastien 2015

2
Shift- 끌기 테스트에 실패합니다.
nothingisnecessary

@nothingisnecessary "시프트 드래그 테스트"에 대해 설명해 주시겠습니까?
Jon z

27

포스터는 주로 가로 전용 크기 조정을 요구했지만 질문은 세로도 요구합니다.

수직 케이스에는 특별한 문제가 있습니다. 브라우저 창 크기를 조정할 때에도 유지하려는 상대 너비 (예 : 50 %)를 설정했을 수 있습니다. 그러나 jQuery UI는 처음 요소의 크기를 조정하고 상대 너비가 손실되면 절대 너비를 px로 설정합니다.

이 사용 사례에서 작동하는 다음 코드를 찾은 경우 :

$("#resizable").resizable({
    handles: 's',
    stop: function(event, ui) {
        $(this).css("width", '');
   }
});

http://jsfiddle.net/cburgmer/wExtX/jQuery UI 크기 조정 가능 : 동쪽 핸들 만 사용할 때 자동 높이 참조


2
매우 흥미 롭습니다. 감사합니다. 명심 할게요. 크기를 조정할 수있는 요소는 크기를 조정 한 후 손실되지 않으면 CSS로 너비를 설정해야한다는 점에 주목하는 것이 중요하다고 생각합니다. 여기를 참조하십시오 jsfiddle.net/paska/wExtX/10
Diego

1
이것이 제가 찾던 솔루션입니다. 어떤 이유로 해당 영역에 대해 핸들이 비활성화되어 있어도 치수는 여전히 px로 설정된 것 같습니다. 이 방법을 사용하지 않으면 % 기반 높이 또는 너비가 느슨해집니다.
Serhiy

실제로 이것은 jQuery-ui 1.11.0에서 작동하지 않는 것 같습니다. 요소에 직접 설정된 CSS 너비는 초기 너비에서 가져 오지 않습니다. 너비를 백분율로 설정하려고하는데 숫자가 px.
Ben

덕분에,이 트릭도 (수평 크기를 조정, 설정 CSS를 크기 조정하면서 가로 세로 비율을 유지 'Shift 키를 누른 상태에서 드래그하여'무시 편리 온 height''에서 resizestop핸들러)
nothingisnecessary

18

매우 간단한 솔루션 :

$( ".selector" ).resizable({ grid: [1, 10000] }); // horizontal
$( ".selector" ).resizable({ grid: [10000, 1] }); // vertical

이것은 draggable ()에서도 작동합니다. 예 : http://jsfiddle.net/xCepm/


1
정말 못 생겼어 !! 또한 올바른 솔루션 (우리가 사용해야하는 솔루션)은 @Nick Craver의 것입니다
Diego

1
나는 동의한다! :-) 그러나 resizable () 및 draggable ()과 함께 작동하는 것이 좋습니다.

1
난이게 좋아! 수학적으로 시원 할뿐만 아니라 오른쪽 하단 모서리에 핸들을 남겨 요소의 크기를 조정할 수 있다는 시각적 힌트를 제공합니다. 허용되는 솔루션에서는 크기 조정 핸들이 숨겨져 있으며 사용자는 하단 여백이 핫스팟이라고 추측해야합니다.
corwin.amber

이것은 @ corwin.amber가 언급 한 이유 때문에 완벽합니다
Lombas

: 그건 내 요구에 완벽했다{handles: 'se', grid: [10000, 1], autoHide: true}
전기 판

9

해결책은 크기 조정을 구성하여 원하지 않는 차원의 변경을 취소하는 것입니다.

다음은 세로로만 크기를 조정할 수있는 예입니다.

foo.resizable({
  resize: function(event, ui) { 
    ui.size.width = ui.originalSize.width;
  }      
}); 

그것도 약간 못 생기지 않습니까?
Diego

1
이렇게하면 사용자가 사용할 수없는 핸들을 볼 수 있습니다.
nima

1

브라우저 크기를 조정할 때 너비 크기를 조정하고 싶었지만 사용자가 요소의 크기를 변경할 때는 제대로 작동하지 않았습니다.

foo.first().resizable({
    resize: function(event, ui) { 
    ui.element.css('width','auto');
    },
}); 

0

나에게 핸들과 resize핸들러 가 모두있는 솔루션 은 잘 작동했기 때문에 사용자는 핸들을 볼 수 있지만 가로로만 크기를 조정할 수 있으며 유사한 솔루션이 세로로 작동해야합니다. 오른쪽 하단 핸들러가 없으면 사용자는 요소의 크기를 조정할 수 있다는 사실모를 수 있습니다 .

사용하는 경우 ui.size.height = ui.originalSize.height;는 것입니다 제대로 작동하지 요소는 초기 상태에서의 크기를 변경 한 경우.

foo.resizable({
    // Handles left right and bottom right corner
    handles: 'e, w, se',
    // Remove height style
    resize: function(event, ui) {
        $(this).css("height", '');
    }
});

더 나은 성능 $(this)을 위해 제거 할 수 있습니다.

var foo = jQuery('#foo');
foo.resizable({
    // Handles left right and bottom right corner
    handles: 'e, w, se',
    // Remove height style
    resize: function(event, ui) {
        foo.css("height", '');
    }
});

0
Successfully working div position Vertically and horizontally
-------------------------------------------------------------

<head>

    <style>
    .resizable {
        height: 100px;
        width: 500px;
        background: #09C;
    }
    .resizable-x {
        height: 100px;
        width: 500px;
        background: #F60;
    }
    </style>

    <script>
     $(function() {

        $( ".resizable" ).resizable({
            grid: [10000, 1]
        });

        $( ".resizable-x " ).resizable({
            grid: [1, 10000]
        });


        $( ".resizable" ).draggable();
        });

      });
        </script>`enter code here`
    </head>

    <body>
    <div class="resizable"></div>
    <div class="resizable-x"></div>
    </body>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.