Кажется, это должно быть довольно просто, но по какой-то причине я не могу обернуть это вокруг себя. У меня есть изображение внутри div "viewport", свойство overflow которого скрыто.
Я реализовал простое масштабирование и панорамирование с помощью пользовательского интерфейса jQuery, однако у меня возникают проблемы с отображением увеличения в центре области просмотра. Я сделал небольшой скринкаст из фотошопа о том эффекте, который пытаюсь воспроизвести: http://dl.dropbox.com/u/107346/share/reference-point-zoom.mov
В PS вы можете настроить масштабную контрольную точку, чтобы объект масштабировался от этой точки. Очевидно, что это невозможно с HTML / CSS / JS, поэтому я пытаюсь найти соответствующие левые и верхние значения CSS, чтобы имитировать эффект.
Вот код, о котором идет речь, с удалением нескольких ненужных битов:
HTML
<div id="viewport">
<img id="map" src="http://dl.dropbox.com/u/107346/share/fake-map.png" alt="" />
</div>
<div id="zoom-control"></div>
Javascript
$('#zoom-control').slider({
min: 300,
max: 1020,
value: 300,
step: 24,
slide: function(event, ui) {
var old_width = $('#map').width();
var new_width = ui.value;
var width_change = new_width - old_width;
$('#map').css({
width: new_width,
// this is where I'm stuck...
// dividing by 2 makes the map zoom
// from the center, but if I've panned
// the map to a different location I'd
// like that reference point to change.
// So instead of zooming relative to
// the map image center point, it would
// appear to zoom relative to the center
// of the viewport.
left: "-=" + (width_change / 2),
top: "-=" + (width_change / 2)
});
}
});
Вот проект на JSFiddle: http://jsfiddle.net/christiannaths/W4seR/