Skip to main content

Complex Tweening Tutorial

For more complex animations, you can use GreenSock Konva Plugin. GreenSock tweens are more powerful than Konva's built-in tweens.

This demo demonstrates tweening the fillLinearGradientColorStops property with GreenSock.

Instructions: Click the shape to start the complex animation with gradient changes.

import Konva from 'konva';

const width = window.innerWidth;
const height = window.innerHeight;

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

const layer = new Konva.Layer();

const circle = new Konva.Circle({
x: width / 2,
y: height / 2,
radius: 70,
fillLinearGradientStartPoint: { x: -50, y: -50 },
fillLinearGradientEndPoint: { x: 50, y: 50 },
fillLinearGradientColorStops: [0, 'red', 1, 'yellow'],
stroke: 'black',
strokeWidth: 4,
draggable: true,
});

layer.add(circle);
stage.add(layer);

circle.on('click tap', () => {
// using regular Konva tween

const tween = new Konva.Tween({
node: circle,
duration: 1,
scaleX: 1.5,
scaleY: 1.5,
easing: Konva.Easings.EaseInOut,
onFinish: () => {
// scale back with another tween

const tween2 = new Konva.Tween({
node: circle,
duration: 1,
scaleX: 1,
scaleY: 1,
easing: Konva.Easings.Bounce.EaseOut,
});
tween2.play();
},
});
tween.play();

// manually update gradient

let ratio = 0;
const anim = new Konva.Animation((frame) => {
ratio += frame.timeDiff / 1000;
if (ratio > 1) {
ratio = 0;
}
circle.fillLinearGradientColorStops([
0,
'red',
ratio,
'yellow',
1,
'blue',
]);
}, layer);
anim.start();
setTimeout(() => anim.stop(), 2000);
});


</rewritten_file>