Skip to main content

HTML5 Canvas Konva 缩放动画教程

要使用 Konva 动画化形状的缩放,我们可以使用 Konva.Animation 创建一个新的动画,并定义一个函数,在每个动画帧修改形状的缩放。

在本教程中,我们将缩放一个蓝色六边形的 x 和 y 组件,一个黄色六边形的 y 组件,以及一个红色六边形的 x 组件,围绕位于形状右侧的轴。

说明: 拖动和放置六边形以观看动画

有关属性和方法的完整列表,请查看 Konva.Animation 文档

import Konva from 'konva';

const stage = new Konva.Stage({
container: 'container',
width: window.innerWidth,
height: window.innerHeight,
});

const layer = new Konva.Layer();
stage.add(layer);

// 蓝色六边形 - 缩放 x 和 y
const blueHex = new Konva.RegularPolygon({
x: 50,
y: 50,
sides: 6,
radius: 20,
fill: '#00D2FF',
stroke: 'black',
strokeWidth: 4,
draggable: true
});

// 黄色六边形 - 仅缩放 y
const yellowHex = new Konva.RegularPolygon({
x: 150,
y: 50,
sides: 6,
radius: 20,
fill: 'yellow',
stroke: 'black',
strokeWidth: 4,
draggable: true
});

// 红色六边形 - 仅缩放 x
const redHex = new Konva.RegularPolygon({
x: 250,
y: 50,
sides: 6,
radius: 20,
fill: 'red',
stroke: 'black',
strokeWidth: 4,
draggable: true
});

layer.add(blueHex);
layer.add(yellowHex);
layer.add(redHex);

const period = 2000;

const anim = new Konva.Animation(function(frame) {
const scale = Math.sin(frame.time * 2 * Math.PI / period) + 2;

// 蓝色六边形 - 缩放 x 和 y
blueHex.scale({ x: scale, y: scale });

// 黄色六边形 - 仅缩放 y
yellowHex.scaleY(scale);

// 红色六边形 - 仅缩放 x
redHex.scaleX(scale);
}, layer);

anim.start();