首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PaperJS变焦和pan

PaperJS变焦和pan
EN

Stack Overflow用户
提问于 2016-10-22 08:05:37
回答 1查看 4.2K关注 0票数 3

我成功地实现了基于这个例子的缩放功能

代码语言:javascript
复制
 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时。我的意思是我想把风景贴在画布的边缘。

这是一个截图

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-23 08:51:36

如果其他人无意中发现了这个问题,这就是答案。关键是检查视图的边界,然后进行相应的调整:

代码语言:javascript
复制
    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));
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40189777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档