我想我明白了。您可能需要检查图像是否按比例缩放。http://jsfiddle.net/DgN8C/7/
基本上,我缩放,然后设置边距。限制因素,或告诉我们是否需要缩放图像的因素,将是两侧中较小的一个。因此,如果点在 80% 处,我们需要点和右侧 ( image_width * 20%
) 之间的像素宽度才能适合我们封闭的 div 对象 ( obj_width / 2
)。注意 if 语句。
因此,如果我们的图像不适合对象,我们需要将其放大。不知何故,我做到了。想想就心疼。
// First, we need to scale image so that it will fit within the dimensions
// of the object. The limiting factor is shorter side of the pixel
limit = Math.min(center_x, 100-center_x) / 100.0;
// Check if image needs to be scaled
if ((obj_width/2) > (limit*img.width())) {
// Image must be scaled
chunk = limit * 2; // Section we need from image
// image_width * chunk = obj_width
img.width( Math.ceil( obj_width / chunk ) );
}
然后我对身高做同样的事情。看起来 jQuerywidth()
和height()
函数让一切都按比例缩放。可能需要进一步测试。
然后我改变边距。
img.css('margin-left', -1 * (((center_x/100.0)*img.width()) - (obj_width/2)));
img.css('margin-top', -1 * (((center_y/100.0)*img.height()) - (obj_height/2)));
编辑好的,第一次尝试没有保留纵横比。现在应该修好了。http://jsfiddle.net/DgN8C/9/逻辑与下面基本相同,只是我智能选择了宽度或高度进行缩放。仅设置一个将保留纵横比。
编辑一个。http://jsfiddle.net/DgN8C/13/这会放大和缩小以适应包含的div
对象。以前的解决方案只是在必要时扩大规模。
这是一篇很有帮助的帖子:jQuery resize to aspect ratio