我成功地实现了基于这个例子的缩放功能
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时。我的意思是我想把风景贴在画布的边缘。
这是一个截图

发布于 2016-10-23 08:51:36
如果其他人无意中发现了这个问题,这就是答案。关键是检查视图的边界,然后进行相应的调整:
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));https://stackoverflow.com/questions/40189777
复制相似问题