我已成功实施基于this example
的缩放功能 zoom: function(delta, point){
if (!delta) return;
var
oldZoom = paper.view.zoom,
oldCenter = paper.view.center,
viewPos = paper.view.viewToProject(point);
newZoom = delta > 0 ? oldZoom * 1.05 : oldZoom / 1.05;
if (!this.allowedZoom(newZoom)) return;
var
zoomScale = oldZoom / newZoom,
centerAdjust = viewPos.subtract(oldCenter),
offset = viewPos.subtract(centerAdjust.multiply(zoomScale)).subtract(oldCenter);
paper.view.center = view.center.add(offset);
},
allowedZoom: function(zoom){
zoom = Math.max(zoom, this.settings.minZoom);
zoom = Math.min(zoom, this.settings.maxZoom);
if (zoom !== paper.view.zoom)
{
paper.view.zoom = zoom;
return zoom;
}
return null;
}
然而,当您缩小回原始scale = 1
时,这不会考虑视图的位置。我的意思是我希望视图坚持画布边缘。
答案 0 :(得分:3)
如果有其他人偶然发现这个问题,那就是答案。关键是检查视图的边界然后相应地调整:
bounds = paper.view.bounds;
if (bounds.x < 0) paper.view.center = paper.view.center.subtract(new Point(bounds.x, 0));
if (bounds.y < 0) paper.view.center = paper.view.center.subtract(new Point(0, bounds.y));
bounds = paper.view.bounds;
var
w = bounds.x + bounds.width,
h = bounds.y + bounds.height;
if (w > paper.view.viewSize.width) paper.view.center = paper.view.center.subtract(new Point(w - paper.view.viewSize.width, 0));
if (h > paper.view.viewSize.height) paper.view.center = paper.view.center.subtract(new Point(0, h - paper.view.viewSize.height));