Если все, чего вы пытаетесь добиться, это держать центр изображения в постоянном положении, то вам просто нужно отрегулировать свойства top
и left
изображения, чтобы центр изображения находился в середина окружающего кадра.
Вычисление - это просто нахождение средней точки вашего кадра, которая находится на полпути вдоль него, и вычитание половины ширины изображения, чтобы найти левую позицию, то же самое с высотой для верхней позиции.
Я сделал вам демонстрационную программу, чтобы показать вам, изменить ширину в поле, максимум 500, и вы увидите, что изображение остается в центре.
Демо: http://jsfiddle.net/Orbling/ZZrjP/
Центрированное изображение - 200x200
Центрированное изображение - 400x400
Я использую #outer-frame
для представления вашего окна или внешнего div вашего сайта, #image-frame
- это любой размер, при котором вы хотите, чтобы изображение отображалось. Если вы хотите, чтобы ваше изображение занимало полное окно, откажитесь от концепции внешней рамки и используйте окно в качестве рамки изображения.
HTML:
<div id="outer-frame">
<div id="image-frame">
<img src="http://fc01.deviantart.net/fs50/f/2009/317/f/4/Colour_Spiral_by_Deatant2.jpg" alt="Spiral by Deatant2" width="1280" height="736" />
</div>
</div>
<div id="controls">
Width: <input type="text" id="iwidth" name="iwidth" value="200" />
Height: <input type="text" id="iheight" name="iheight" value="200" />
</div>
CSS:
#outer-frame { width: 500px; height: 500px; margin: 10px; border: 1px dashed black; }
#image-frame { width: 200px; height: 200px; overflow: hidden; position: relative; }
#image-frame img { position: relative; }
#controls { margin: 10px 10px 0 10px; }
#controls input { width: 80px; }
Обратите внимание на директивы position: relative;
, которые гарантируют, что позиции относительно контейнера, если бы они были относительно страницы, вычисления должны были бы быть смещены.
JQuery:
$('#image-frame').bind('reposition-image', function() {
var imageFrame = $(this);
var outerFrame = $('#outer-frame');
var image = imageFrame.find('img');
var frameWidth = imageFrame.width();
var frameHeight = imageFrame.height();
// center image frame
imageFrame.css({ left: (outerFrame.width() / 2) - (imageFrame.width() / 2),
top: (outerFrame.height() / 2) - (imageFrame.height() /2)});
// position image in frame
image.css({ left: (imageFrame.width() / 2) - (image.attr('width') / 2),
top: (imageFrame.height() / 2) - (image.attr('height') / 2)});
}).trigger('reposition-image');
$('#controls input').change(function() {
var jThis = $(this);
var cDim = jThis.attr('id').replace(/^i/, '');
var nSize = parseInt(jThis.val());
if (!isNaN(nSize) && nSize != 0) {
var outerFrame = $('#outer-frame');
nSize = (nSize > outerFrame[cDim]() ? outerFrame[cDim]() : nSize);
$('#image-frame')[cDim](nSize).trigger('reposition-image');
}
});