jQuery UI Resizableを使用して水平方向または垂直方向にのみサイズを変更するにはどうすればよいですか?


81

私が見つけた唯一の解決策は、現在の値で最大と最小の高さまたは幅を設定することです。

例:

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

しかし、これは本当に醜いです。特に、プログラムで要素の高さを変更する必要がある場合はそうです。

回答:


145

次のように、サイズ変更handlesオプションを左右(または東/西)にのみ表示するように設定できます

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

ここで試してみることができます。


7
私はちょうどこの解決策に関する警告を見つけました。インラインスタイルとして実行した場合でも、幅と高さは表示されます。これは、垂直のみの解決策で私に問題を引き起こしています。サイズを変更すると、幅が設定され、100%ではなくなります(ただし、px値)。他の人が検索して遭遇した場合に備えて、これをここに置くだけです。
ファーンカー2014

@Fernkerはい、それは苦痛です。
ベン

同じ値のmin-widthプロパティとmax-widthプロパティをdivに指定すると、パーセンテージ幅を取り戻すことができます。オーバーライドされません:)
Sébastien2015

2
シフトドラッグテストに失敗します。
何も必要ありません2016年

@nothingisnecessary「シフトドラッグテスト」について説明していただけますか?
Jon z

27

ポスターは主に水平方向のみのサイズ変更を求めていましたが、質問は垂直方向も求めています。

垂直の場合には特別な問題があります。ブラウザウィンドウのサイズが変更された場合でも保持したい相対幅(たとえば50%)を設定している可能性があります。ただし、最初に要素のサイズを変更すると、jQuery UIは絶対幅をピクセル単位で設定し、相対幅は失われます。

このユースケースで機能する次のコードが見つかった場合:

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

http://jsfiddle.net/cburgmer/wExtX/およびjQueryUIのサイズ変更可能:イーストハンドルのみを使用する場合の自動高さも参照してください。


2
とてもおもしろい、ありがとう。私はそれを心に留めておきます。サイズ変更可能な要素は、サイズ変更後に失われない場合は、cssで幅を設定する必要があることに注意することが重要だと思います。こちらをご覧くださいjsfiddle.net/paska/wExtX/10–
ディエゴ

1
これが私が探していた解決策です。何らかの理由で、領域のハンドルが無効になっているにもかかわらず、そのサイズはまだpxに設定されているようです。この方法を使用しない場合、%ベースの高さまたは幅が失われます。
Serhiy 2012年

実際、これはjQuery-ui1.11.0では機能しないようです。要素に直接設定されたCSS幅は、初期幅から取得されません。幅をパーセンテージに設定しようとしていますが、数が上書きされpxます。
ベン

おかげで、このトリックは、サイズ変更中にアスペクト比を維持する「shift-drag」を無視するのにもheight''resizestop
役立ち

18

非常に簡単な解決策:

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

これはdraggable()でも機能します。例:http//jsfiddle.net/xCepm/


1
本当に醜いです!! また、正しい解決策(使用することになっているもの)は@Nick Craver's
Diego

1
同意する!:-)しかし、resizable()とdraggable()で動作するのは素晴らしいことです。
1

1
私はこれが好きです!数学的にクールであることに加えて、ハンドルを右下隅に残し、要素のサイズが変更可能であることを視覚的に示します。受け入れられているソリューションでは、サイズ変更ハンドルは非表示になっており、ユーザーは下マージンがホットスポットであると推測する必要があります。
corwin.amber 2015

これは、@ corwin.amberが述べた理由で完璧です
Lombas 2016

それは私のニーズにぴったりでした:{handles: 'se', grid: [10000, 1], autoHide: true}
エレクトロタイプ2017

9

解決策は、サイズ変更可能を構成して、不要なディメンションの変更をキャンセルすることです。

これは、垂直方向にのみサイズ変更可能な例です。

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

それもちょっと醜いのではないでしょうか?
ディエゴ

1
このようにして、ユーザーは使用できないハンドルを確認できます。
nima 2012

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.