私はスクリプトを作成しました: http://jsfiddle.net/radar24/XZgh4/は、指定されたディメンションを外側の div にスケーリングします。200 x 99 などの寸法を入力するまで、すべて問題ないように見えます。その後、ボックスが外側に大きくなります。
これの原因を本当に見つけることができません。誰か助けてもらえますか?
私はスクリプトを作成しました: http://jsfiddle.net/radar24/XZgh4/は、指定されたディメンションを外側の div にスケーリングします。200 x 99 などの寸法を入力するまで、すべて問題ないように見えます。その後、ボックスが外側に大きくなります。
これの原因を本当に見つけることができません。誰か助けてもらえますか?
問題は、両方の軸に沿ってプロポーションを制限していないことです。ボックスの高さ:幅の比率は 5:3 です。両方の軸に沿って制限しないと、ボックスの外側に出血する可能性があります. 例はこれを最もよく示しているかもしれません。
高さが 2 つの次元のうち大きい方の場合を考えてみましょう。あなたのコードは、500px 軸に沿ってのみ制限しています。したがって、5:>3 の比率のボックスをそこに投げると、クリーピング エッジが得られます。
たとえば、ボックスに「3」と「5」を入れます。完璧にフィットします。今度は 3.1 と 5 にします。
次元の比率がこの境界を超えるかどうかを THEN が判断する各セクションに、別の if ステートメントを追加する必要があります。上記の場合、5:3.1 の高さが 500px ではなく、3.1 が 300px になる高さ (500px 未満) になるようにする必要があります。それは483pxになります。
それは理にかなっていますか?
そうでない場合は、もう一度言い換えてみます。
既にある 2 つの if ステートメントに別の if ステートメントのセットを入れます。これらは、LARGER ディメンションを設定すると、SMALLER ディメンションがその方向でボックスの境界の外に出るかどうかを確認します。疑似コードで
if (height > width)
calculate the height
calculate the width
if (width > div.width)
width = div.width
height = div.width * aspect;
これが十分に明確でない場合は、私に聞いてください!
編集:これは、それを正しくする JSFiddleです。各エッジに沿って白い境界線が必要な場合は、さらにコードを追加する必要があります。
Edit2:ここに白いフチが戻ってきた!
Edit3: また、それをきれいにして、アスペクトだけを使用してこれを行うこともできます。私はあなたのために最初のものをしました。あと3つ!
それはかなり小さな間違いです。とを比較する前に、width
とを整数に変換するのを忘れました。したがって、に変更するheight
必要があります。if (width >= height)
if (parseInt(width) >= parseInt(height))
jQuery .val() は常に整数に解析する必要がある文字列を返します
....
height = parseInt($('#height').val()) || 0;// making 0 as default value.
width = parseInt($('#width').val()) || 0;
....