Я вижу 2 возможных решения этой проблемы:
решение 1
Вы можете напрямую масштабировать свои элементы, используя item.scale () вместо view.zoom .
Проблема, с которой вы можете столкнуться, состоит в том, что ваш слой непременно будет перекрываться, поэтому вы можете комбинировать этот подход с group.clipped , чтобы скрыть переполнение слоя.
Здесьэто эскиз , демонстрирующий это решение.
// Draw a line materializing layers separation.
new Path.Line({
from: view.bounds.topCenter,
to: view.bounds.bottomCenter,
strokeColor: 'black'
});
// Draw a rectangle that will be used to crop the layer.
var cropRectangle = new Path.Rectangle({
from: view.bounds.toLeft,
to: view.bounds.bottomCenter
});
// Draw a circle in the left part of the screen.
var circle = new Path.Circle({
center: [view.bounds.leftCenter.x + view.center.x / 2, view.center.y],
radius: 50,
fillColor: 'orange'
});
// Create a group that will be used to pan/zoom left part.
var group = new Group([circle]);
// Create left part layer and crop it with the rectangle so that overflow is
// hidden.
var layer = new Layer([cropRectangle, group]);
layer.clipped = true;
// Directly manipulate the group when you want to pan/zoom.
group.translate(view.bounds.width / 4, 0);
group.scale(1.5);
// You can use the same architecture for the right part...
решение 2
Лично я бы выбрал другое решение, состоящее из управления двумя отдельными холстами и инициализации Paper.js
накаждый из которых производит 2 различных PaperScope экземпляра.
Тогда вы сможете контролировать view.zoom
для каждого из этих полотен.
Вот скрипка , демонстрирующая это решение.
// Initialize paper scopes.
var scope1 = new paper.PaperScope();
scope1.setup(document.getElementById('canvas1'));
var scope2 = new paper.PaperScope();
scope2.setup(document.getElementById('canvas2'));
// Draw a circle on left canvas.
new paper.Path.Circle({
center: scope1.view.center,
radius: 50,
fillColor: 'orange',
parent: scope1.project.activeLayer
});
// Draw a circle on right canvas.
new paper.Path.Circle({
center: scope2.view.center,
radius: 50,
fillColor: 'blue',
parent: scope2.project.activeLayer
});
// Zoom in left canvas.
scope1.view.zoom = 2;
// Zoom out right canvas.
scope2.view.zoom = 0.5;