<!DOCTYPE html> <html> <head> <script src="https://unpkg.com/[email protected]/konva.min.js"></script> <meta charset="utf-8" /> <title>Konva Multi-touch Scale Stage Demo</title> <style> body { margin: 0; padding: 0; overflow: hidden; background-color: #f0f0f0; } </style> </head> <body> <div id="container"></div> <script> var width = window.innerWidth; var height = window.innerHeight;
var lastDist = 0; var startScale = 1;
function getDistance(p1, p2) { return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)); }
var stage = new Konva.Stage({ container: 'container', width: width, height: height, draggable: true, x: width / 2, y: height / 2, offset: { x: width / 2, y: height / 2 } });
var layer = new Konva.Layer();
var triangle = new Konva.RegularPolygon({ x: 190, y: stage.height() / 2, sides: 3, radius: 80, fill: 'green', stroke: 'black', strokeWidth: 4 });
var circle = new Konva.Circle({ x: 380, y: stage.height() / 2, radius: 70, fill: 'red', stroke: 'black', strokeWidth: 4 });
stage.on('touchmove', function(e) { e.evt.preventDefault(); var touch1 = e.evt.touches[0]; var touch2 = e.evt.touches[1];
if (touch1 && touch2) { var dist = getDistance( { x: touch1.clientX, y: touch1.clientY }, { x: touch2.clientX, y: touch2.clientY } );
if (!lastDist) { lastDist = dist; }
var scale = (stage.scaleX() * dist) / lastDist;
stage.scaleX(scale); stage.scaleY(scale); stage.batchDraw(); lastDist = dist; } });
stage.on('touchend', function() { lastDist = 0; });
layer.add(triangle); layer.add(circle); stage.add(layer); </script> </body> </html>
|