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에 ''에서 resize와 stop핸들러)
— 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.