Я сделал плагин для такого поведения: https://github.com/eduplus/pinchlayer
Это, вероятно, немного устарели с недавними изменениями, но логика в функции layerTouchMove, скорее всего, еще звук. Здесь:
var touch1 = event.touches[0];
var touch2 = event.touches[1];
if (touch1 && touch2) {
self.setDraggable(false);
if (self.trans != undefined) { self.trans.stop(); }
if (self.startDistance === undefined) {
self.startDistance = self.getDistance(touch1, touch2);
self.touchPosition.x = (touch1.clientX + touch2.clientX)/2;
self.touchPosition.y = (touch1.clientY + touch2.clientY)/2;
self.layerPosition.x = (Math.abs(self.getX()) + self.touchPosition.x)/self.startScale;
self.layerPosition.y = (Math.abs(self.getY()) + self.touchPosition.y)/self.startScale;
}
else {
var dist = self.getDistance(touch1, touch2);
var scale = (dist/self.startDistance) * self.startScale;
if (scale < self.minScale) { scale = self.minScale; }
if (scale > self.maxScale) { scale = self.maxScale; }
self.setScale(scale, scale);
var x = (self.layerPosition.x * scale) - self.touchPosition.x;
var y = (self.layerPosition.y * scale) - self.touchPosition.y;
var pos = self.checkBounds({ x: -x, y: -y });
self.setPosition(pos.x, pos.y);
self.draw();
}
В основном он будет записывать начальную точку и расстояние (как долго пинч), а затем масштабировать и установить позицию слоя соответственно. Надеюсь это поможет.
Отлично! Спасибо, я хорошо посмотрю на это. – Mark