等式は、、、
margin = -half_overflow + (((center_offset - click_offset) * resize_ratio) - (center_offset - click_offset));
...そして、xとyに対してそれを行う必要があります。
以下に、それを行うコードを貼り付けますが、このコードは正方形の画像を扱うことに注意してください。したがって、幅と高さの両方に幅を使用します。長方形の画像でこれを使用するには、高さを取得し、幅があるすべての Y 計算でそれを使用し、content_width などのように使用しているすべての変数を設定する必要があります。しかし、アルゴリズムはすべてそこにあり、あなたはコードからそれを解決することができます...
zoomChart: function(e)
{
var chart_max = 2048;
var zoom_max = egapp.user.options.zoom_multiplier || 2; // >= 2
var chart_bounds = $('#egapp_chart_bounds');
var chart_imgs = chart_bounds.find('img');
var width = chart_imgs.width();
if (width == chart_bounds.width()) { // zoom in
// margin = -half_overflow + (((center_offset - click_offset) * resize_ratio) - (center_offset - click_offset));
chart_bounds.removeClass('egapp_zoom_in');
if (width == chart_max)
return;
chart_bounds.addClass('egapp_zoom_out');
var new_width = parseInt(width * zoom_max);
if (new_width > chart_max)
new_width = chart_max;
var ratio = new_width / width;
var moveX = moveY = -((new_width - width) / 2);
var chart_offset = chart_bounds.offset();
var offsetX = (chart_offset.left + (width / 2)) - e.pageX;
var offsetY = (chart_offset.top + (width / 2)) - e.pageY;
moveX += parseInt((offsetX * ratio) - offsetX);
moveY += parseInt((offsetY * ratio) - offsetY);
chart_imgs.animate({width: new_width+'px', height: new_width+'px', marginLeft: moveX+'px', marginTop: moveY+'px'}, 'fast');
chart_bounds.addClass('egapp_zoom_out');
}
else { // zoom out
var new_width = egapp.content_width - 10;
chart_imgs.animate({width: new_width+'px', height: new_width+'px', marginLeft: 0, marginTop: 0}, 'fast');
chart_bounds.removeClass('egapp_zoom_out').addClass('egapp_zoom_in');
}
},
HTMLは次のようなものです...
<div id="egapp_chart_bounds" style="width: 608px; height: 608px;" class="egapp_zoom_in">
<img id="egapp_timeline_chart" src="some.image" class="egapp_chart" style="width: 608px; height: 608px; margin-left: 0px; margin-top: 0px;">
<img id="egapp_expression_chart_9" src="overlay.image" class="egapp_chart_overlay" style="width: 608px; height: 608px;">
</div>
そして、CSSは次のようになります...
#egapp_chart_bounds{
overflow: hidden;
}
.egapp_chart, .egapp_chart_overlay{
position: absolute;
}
.egapp_zoom_in{
cursor: -moz-zoom-in;
cursor: -webkit-zoom-in;
cursor: zoom-in;
}
.egapp_zoom_out{
cursor: -moz-zoom-out;
cursor: -webkit-zoom-out;
cursor: zoom-out;
}