私の要件 -
- div/canvas 内にランダムな画像が表示される
- 画像の高さは親の高さに調整する必要があります
- 画像の幅は(高さに応じて)比例してサイズ変更する必要があります
- 画像の幅が親の幅より大きい場合、左右から均等に切り取る
私はJavaスクリプトでこれを達成しました。Jsfiddle はhttp://jsfiddle.net/yesprasoon/N3WvF/にあります。出力ウィンドウのサイズを変更して、それがどのように機能しているかを確認できます。
しかし、私は退屈な方法でやっていると感じており、CSS や jQuery には非常に単純なものがあります。純粋なcss(できれば)で私を助けてもらえますか?
ここにもJavaスクリプトを添付しています-
var strDataURI;
//
displayBackground(true);
//
window.onresize = function(event) {
displayBackground(false);
}
//
function displayBackground(bChangeImage)
{
//alert("displayBackground");
var appWidth = window.innerWidth;
var appHeight = window.innerHeight;
//
if (bChangeImage)
{
var suffix_array = ["_california","_easter","_eiffel","_hk","_taj"];
var ran = Math.floor((Math.random()*5)+1);
ran = ran - 1;
//ran = 3;
strDataURI = "http://minds-eye.info/TP_Test/TP"+suffix_array[ran]+".jpg";
}
//
var myCanvas = document.getElementById('canvas');
var ctx = myCanvas.getContext('2d');
var img = new Image;
img.onload = function(){
ctx.canvas.width = appWidth;
ctx.canvas.height = appHeight;
//
var hFraction = appHeight / img.naturalHeight;
var displayWidth = img.naturalWidth*hFraction;
mrgLeft = (appWidth - displayWidth)/2;
mrgTop = (appHeight - img.naturalHeight)/2;
ctx.drawImage(img,mrgLeft,0, displayWidth, appHeight);
//blurMargin = 20;
//stackBlurCanvasRGB( "canvas", blurMargin, blurMargin, appWidth-blurMargin*2, appHeight-blurMargin*2, 6 );
};
img.src = strDataURI;
}