如果您使用幻灯片演示我正在here,您可以看到,如果您调整浏览器窗口的大小,图片会调整大小并正确移动。
...除非你使浏览器窗口的宽度小于一定量(我无法确定定义该数量的是什么),然后它会拉伸图像而不是缩放它。我该如何解决这个问题?
这是我的调整大小代码:
winWidth = $(window).width();
winHeight = $(window).height();
ratio = winWidth/winHeight;
if(ratio > imgRatio){
$('#curImg img').css({width:winWidth});
imgWidth = winWidth;
imgHeight = $('#curImg img').height();
$("#curImg img").css({top: (-1*Math.round((imgHeight-winHeight)/2)) + "px"});
$("#curImg").css({height: winHeight + "px"});
}else{
$('#curImg img').css({height:winHeight});
imgHeight = winHeight;
imgWidth = $('#curImg img').width();
$("#curImg img").css({left: (-1*Math.round((imgWidth-winWidth)/2)) + "px"});
$("#curImg").css({width: winWidth + "px"});
}
答案 0 :(得分:2)
您还可以查看此jQuery插件: http://srobbin.com/jquery-plugins/backstretch/
查看多个解决方案的CSS技巧: http://css-tricks.com/perfect-full-page-background-image/
答案 1 :(得分:1)
您应该查看background-size
属性,尤其是cover
值
答案 2 :(得分:0)
我写的东西有效:
//oWidth - container width
//oHeight - container height
//iWidth = image width
//iHeight = image height
iRatio = iWidth/iHeight;
wRatio = oWidth/oHeight;
if(iRatio<wRatio){
imageWidth = oWidth;
imageHeight = Math.ceil(iHeight*(oWidth/iWidth));
}
else{
imageHeight = oHeight;
imageWidth = Math.ceil(iWidth*(oHeight/iHeight));
}
$('#backgroundResizeImage').css({
'height': imageHeight,
'width': imageWidth
});
希望这有帮助!
答案 3 :(得分:0)
我重写了你的例子,做了一个独立的演示。
与你的问题无关的两个注释。
最大的相关变化是我改变了设置图像高度和宽度的方式,具体取决于它们的比例与窗口的比较。我认为这种方式更清晰,但这是主观的。但它确实有效!
var $window = $(window),
$img = $('img'),
imgRatio = $img.width() / $img.height();
$window.on('resize', function (event) {
var imgWidth = $img.width(),
imgHeight = $img.height(),
winWidth = $window.width(),
winHeight = $window.height(),
ratio = winWidth / winHeight;
// The image is wider than the window
if (ratio < imgRatio) {
$img.width(winWidth);
$img.height(winWidth / imgRatio);
$img.css({
left: 0,
top: (-1 * Math.round((imgHeight - winHeight) / 2)) + "px"
});
// The image is taller than the window
} else {
$img.width(winHeight * imgRatio);
$img.height(winHeight);
$img.css({
left: (-1 * Math.round((imgWidth - winWidth) / 2)) + "px",
top: 0
});
}
});