2021-05-04 06:09:18 +08:00
|
|
|
import { assert } from 'chai';
|
|
|
|
|
2021-05-05 22:19:24 +08:00
|
|
|
import { addStage, Konva, loadImage } from '../unit/test-utils';
|
2021-05-04 06:09:18 +08:00
|
|
|
|
|
|
|
describe('Manual', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
// ======================================================
|
2021-05-04 06:09:18 +08:00
|
|
|
it('oscillation animation', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
|
|
|
var layer = new Konva.Layer();
|
|
|
|
|
|
|
|
var hexagon = new Konva.RegularPolygon({
|
|
|
|
x: stage.width() / 2,
|
|
|
|
y: stage.height() / 2,
|
|
|
|
sides: 6,
|
|
|
|
radius: 70,
|
|
|
|
fill: 'red',
|
|
|
|
stroke: 'black',
|
2020-05-08 22:59:35 +08:00
|
|
|
strokeWidth: 4,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2014-02-20 00:39:38 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
// var hexagon = new Konva.Rect({
|
|
|
|
// x: stage.width()/2,
|
|
|
|
// y: stage.height()/2,
|
|
|
|
// width: 100,
|
|
|
|
// height: 50,
|
|
|
|
// fill: 'red',
|
|
|
|
// stroke: 'black',
|
|
|
|
// strokeWidth: 4
|
|
|
|
// });
|
|
|
|
|
|
|
|
layer.add(hexagon);
|
|
|
|
stage.add(layer);
|
|
|
|
|
|
|
|
var amplitude = 150;
|
|
|
|
var period = 2000;
|
|
|
|
// in ms
|
|
|
|
var centerX = stage.width() / 2;
|
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
var anim = new Konva.Animation(function (frame) {
|
2021-05-04 06:09:18 +08:00
|
|
|
hexagon.x(
|
2020-05-08 22:59:35 +08:00
|
|
|
amplitude * Math.sin((new Date().getTime() * 2 * Math.PI) / period) +
|
2017-07-29 00:40:07 +08:00
|
|
|
centerX
|
|
|
|
);
|
|
|
|
}, layer);
|
2017-02-24 22:15:33 +08:00
|
|
|
|
|
|
|
anim.start();
|
|
|
|
});
|
|
|
|
|
|
|
|
// ======================================================
|
2021-05-04 06:09:18 +08:00
|
|
|
it('rotation animation', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
|
|
|
var layer = new Konva.Layer();
|
|
|
|
var rect;
|
|
|
|
|
|
|
|
for (var n = 0; n < 100; n++) {
|
|
|
|
rect = new Konva.Rect({
|
|
|
|
x: Math.random() * 400,
|
|
|
|
y: Math.random() * 400,
|
|
|
|
width: 100,
|
|
|
|
height: 50,
|
2014-02-20 00:39:38 +08:00
|
|
|
fill: 'red',
|
|
|
|
stroke: 'black',
|
2020-05-08 22:59:35 +08:00
|
|
|
strokeWidth: 4,
|
2014-02-20 00:39:38 +08:00
|
|
|
});
|
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
layer.add(rect);
|
|
|
|
}
|
|
|
|
|
|
|
|
stage.add(layer);
|
|
|
|
|
|
|
|
var velocity = 360; // 1 rev per second
|
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
var anim = new Konva.Animation(function (frame) {
|
2021-04-30 22:24:27 +08:00
|
|
|
layer
|
|
|
|
.find('Rect')
|
|
|
|
.forEach((rect) => rect.rotate((velocity * frame.timeDiff) / 1000));
|
2017-07-29 00:40:07 +08:00
|
|
|
}, layer);
|
2017-02-24 22:15:33 +08:00
|
|
|
|
|
|
|
anim.start();
|
|
|
|
});
|
|
|
|
|
|
|
|
// ======================================================
|
2021-05-04 06:09:18 +08:00
|
|
|
it('tween node', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
|
|
|
var layer = new Konva.Layer();
|
|
|
|
var rect = new Konva.Rect({
|
|
|
|
x: 100,
|
|
|
|
y: 100,
|
|
|
|
width: 100,
|
|
|
|
height: 50,
|
|
|
|
fill: 'green',
|
|
|
|
stroke: 'black',
|
|
|
|
strokeWidth: 2,
|
2020-05-08 22:59:35 +08:00
|
|
|
opacity: 0.2,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2014-02-20 00:39:38 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
layer.add(rect);
|
|
|
|
stage.add(layer);
|
|
|
|
|
|
|
|
var tween = new Konva.Tween({
|
|
|
|
node: rect,
|
|
|
|
duration: 1,
|
|
|
|
x: 400,
|
|
|
|
y: 30,
|
|
|
|
rotation: 90,
|
|
|
|
opacity: 1,
|
|
|
|
strokeWidth: 6,
|
2020-05-08 22:59:35 +08:00
|
|
|
scaleX: 1.5,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2014-02-20 00:39:38 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
tween.play();
|
|
|
|
});
|
|
|
|
|
|
|
|
// ======================================================
|
2021-05-04 06:09:18 +08:00
|
|
|
it('tween spline', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
|
|
|
var layer = new Konva.Layer();
|
|
|
|
|
|
|
|
var spline = new Konva.Line({
|
|
|
|
points: [73, 160, 340, 23, 500, 109, 300, 109],
|
|
|
|
stroke: 'blue',
|
|
|
|
strokeWidth: 10,
|
|
|
|
lineCap: 'round',
|
|
|
|
lineJoin: 'round',
|
|
|
|
draggable: true,
|
2020-05-08 22:59:35 +08:00
|
|
|
tension: 1,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2014-02-20 00:39:38 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
layer.add(spline);
|
|
|
|
stage.add(layer);
|
2014-02-20 00:39:38 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
var tween = new Konva.Tween({
|
|
|
|
node: spline,
|
|
|
|
duration: 1,
|
|
|
|
//x: 100,
|
2014-02-20 00:39:38 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
points: [200, 160, 200, 23, 500, 109, 100, 10],
|
|
|
|
easing: Konva.Easings.BackEaseOut,
|
2020-05-08 22:59:35 +08:00
|
|
|
yoyo: false,
|
2014-02-20 00:39:38 +08:00
|
|
|
});
|
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
// stage.getContent().addEventListener('mouseover', function() {
|
|
|
|
// tween.play();
|
|
|
|
// });
|
|
|
|
|
|
|
|
// stage.getContent().addEventListener('mouseout', function() {
|
|
|
|
// tween.reverse();
|
|
|
|
// });
|
|
|
|
|
|
|
|
tween.play();
|
|
|
|
});
|
|
|
|
|
|
|
|
// ======================================================
|
2021-05-04 06:09:18 +08:00
|
|
|
it('blur and tween spline', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
|
|
|
var layer = new Konva.Layer();
|
|
|
|
|
|
|
|
var spline = new Konva.Line({
|
|
|
|
points: [73, 160, 340, 23, 500, 109, 300, 109],
|
|
|
|
stroke: 'blue',
|
|
|
|
strokeWidth: 10,
|
|
|
|
lineCap: 'round',
|
|
|
|
lineJoin: 'round',
|
|
|
|
draggable: true,
|
2020-05-08 22:59:35 +08:00
|
|
|
tension: 1,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2014-02-20 00:39:38 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
layer.add(spline);
|
|
|
|
stage.add(layer);
|
2014-02-20 00:39:38 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
spline.cache({
|
|
|
|
width: stage.width(),
|
2020-05-08 22:59:35 +08:00
|
|
|
height: stage.height(),
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2014-02-20 00:39:38 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
spline.filters([Konva.Filters.Blur]).blurRadius(40);
|
|
|
|
layer.draw();
|
2014-02-20 00:39:38 +08:00
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
layer.on('beforeDraw', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
spline.cache({
|
|
|
|
width: stage.width(),
|
2020-05-08 22:59:35 +08:00
|
|
|
height: stage.height(),
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
});
|
2014-02-20 00:39:38 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
var tween = new Konva.Tween({
|
|
|
|
node: spline,
|
|
|
|
duration: 2,
|
|
|
|
//x: 100,
|
2014-02-20 00:39:38 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
points: [200, 160, 200, 23, 500, 109, 100, 10],
|
|
|
|
blurRadius: 0,
|
|
|
|
easing: Konva.Easings.BackEaseOut,
|
2020-05-08 22:59:35 +08:00
|
|
|
yoyo: false,
|
2014-02-20 00:39:38 +08:00
|
|
|
});
|
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
// stage.getContent().addEventListener('mouseover', function() {
|
|
|
|
// tween.play();
|
|
|
|
// });
|
2013-11-03 13:31:09 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
// stage.getContent().addEventListener('mouseout', function() {
|
|
|
|
// tween.reverse();
|
|
|
|
// });
|
2013-11-03 13:31:09 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
tween.play();
|
|
|
|
});
|
2013-11-03 13:31:09 +08:00
|
|
|
|
2021-05-04 06:09:18 +08:00
|
|
|
it('Make sure that all texts are inside rectangles.', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
|
|
|
var layer = new Konva.Layer();
|
2013-11-03 13:31:09 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
var text = new Konva.Text({
|
|
|
|
fontSize: 50,
|
|
|
|
y: 5,
|
|
|
|
x: 25,
|
|
|
|
fill: 'black',
|
2020-05-08 22:59:35 +08:00
|
|
|
text: 'text',
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
var params = text.getSelfRect();
|
|
|
|
var rect = new Konva.Rect({
|
|
|
|
x: text.x() + params.x,
|
|
|
|
y: text.y() + params.y,
|
|
|
|
width: params.width,
|
|
|
|
height: params.height,
|
2020-05-08 22:59:35 +08:00
|
|
|
stroke: 'black',
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
layer.add(rect, text);
|
|
|
|
|
|
|
|
text = new Konva.Text({
|
|
|
|
fontSize: 40,
|
|
|
|
y: 40,
|
|
|
|
x: 150,
|
|
|
|
fill: 'black',
|
|
|
|
text: 'Hello\nWorld! How Are you?',
|
2020-05-08 22:59:35 +08:00
|
|
|
align: 'center',
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
params = text.getSelfRect();
|
|
|
|
rect = new Konva.Rect({
|
|
|
|
x: text.x() + params.x,
|
|
|
|
y: text.y() + params.y,
|
|
|
|
width: params.width,
|
|
|
|
height: params.height,
|
2020-05-08 22:59:35 +08:00
|
|
|
stroke: 'black',
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
layer.add(rect, text);
|
|
|
|
|
|
|
|
stage.add(layer);
|
|
|
|
});
|
|
|
|
|
2021-05-04 06:09:18 +08:00
|
|
|
it('change hit graph ratio', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
|
|
|
var layer = new Konva.Layer();
|
|
|
|
var circle = new Konva.Circle({
|
|
|
|
x: stage.width() / 2,
|
|
|
|
y: stage.height() / 2,
|
|
|
|
radius: 50,
|
|
|
|
stroke: 'black',
|
|
|
|
fill: 'red',
|
|
|
|
strokeWidth: 5,
|
2020-05-08 22:59:35 +08:00
|
|
|
draggable: true,
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2013-11-03 13:31:09 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
var text = new Konva.Text({
|
2020-05-08 22:59:35 +08:00
|
|
|
text: 'click on circle to decrease hit grpah retion',
|
2013-11-03 13:31:09 +08:00
|
|
|
});
|
2013-12-06 15:10:42 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
layer.add(circle, text);
|
|
|
|
stage.add(layer);
|
|
|
|
showHit(layer);
|
2013-12-06 15:10:42 +08:00
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
circle.on('mouseenter', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
document.body.style.cursor = 'pointer';
|
|
|
|
});
|
2013-12-06 15:10:42 +08:00
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
circle.on('mouseleave', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
document.body.style.cursor = 'default';
|
|
|
|
});
|
2013-12-06 15:10:42 +08:00
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
circle.on('click', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
var ratio = layer.getHitCanvas().getPixelRatio() * 0.8;
|
|
|
|
console.log('new ratio', ratio);
|
|
|
|
layer.getHitCanvas().setPixelRatio(ratio);
|
|
|
|
layer.draw();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2021-05-04 06:09:18 +08:00
|
|
|
it('tween color', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
|
|
|
|
|
|
|
var layer = new Konva.Layer();
|
|
|
|
|
|
|
|
var circle = new Konva.Circle({
|
|
|
|
x: 100,
|
2021-05-04 06:09:18 +08:00
|
|
|
y: stage.height() / 2,
|
2017-02-24 22:15:33 +08:00
|
|
|
radius: 70,
|
|
|
|
fill: 'red',
|
|
|
|
stroke: 'blue',
|
|
|
|
strokeWidth: 4,
|
2021-05-04 06:09:18 +08:00
|
|
|
shadowOffx: 10,
|
2017-02-24 22:15:33 +08:00
|
|
|
shadowOffsetY: 10,
|
2020-05-08 22:59:35 +08:00
|
|
|
shadowColor: 'black',
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2013-12-06 15:10:42 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
var text = new Konva.Text({
|
2020-05-08 22:59:35 +08:00
|
|
|
text: 'click on circle to start tween',
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
2013-12-06 15:10:42 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
layer.add(circle, text);
|
|
|
|
stage.add(layer);
|
2013-12-06 15:10:42 +08:00
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
circle.on('click', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
var tween = new Konva.Tween({
|
|
|
|
node: circle,
|
|
|
|
duration: 1,
|
|
|
|
fill: Konva.Util.getRandomColor(),
|
|
|
|
stroke: Konva.Util.getRandomColor(),
|
2020-05-08 22:59:35 +08:00
|
|
|
shadowColor: Konva.Util.getRandomColor(),
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
tween.play();
|
2013-12-06 15:10:42 +08:00
|
|
|
});
|
2017-02-24 22:15:33 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
// ======================================================
|
2021-05-04 06:09:18 +08:00
|
|
|
it('create image hit region with pixelRatio, look at hit, test hit with mouseover', function (done) {
|
2017-07-29 00:40:07 +08:00
|
|
|
var imageObj = new Image();
|
2017-02-24 22:15:33 +08:00
|
|
|
|
2017-07-29 00:40:07 +08:00
|
|
|
Konva.pixelRatio = 2;
|
|
|
|
var stage = addStage();
|
|
|
|
var layer = new Konva.Layer();
|
2017-02-24 22:15:33 +08:00
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
imageObj.onload = function () {
|
2017-07-29 00:40:07 +08:00
|
|
|
var lion = new Konva.Image({
|
|
|
|
x: 200,
|
|
|
|
y: 40,
|
|
|
|
image: imageObj,
|
2020-05-08 22:59:35 +08:00
|
|
|
draggable: true,
|
2017-07-29 00:40:07 +08:00
|
|
|
});
|
2014-01-06 05:21:05 +08:00
|
|
|
|
2017-07-29 00:40:07 +08:00
|
|
|
layer.add(lion);
|
2014-01-06 05:21:05 +08:00
|
|
|
|
2017-07-29 00:40:07 +08:00
|
|
|
stage.add(layer);
|
2014-01-06 05:21:05 +08:00
|
|
|
|
2017-07-29 00:40:07 +08:00
|
|
|
lion.cache();
|
|
|
|
lion.drawHitFromCache();
|
|
|
|
layer.draw();
|
2014-01-06 05:21:05 +08:00
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
lion.on('mouseenter', function () {
|
2017-07-29 00:40:07 +08:00
|
|
|
document.body.style.cursor = 'pointer';
|
|
|
|
});
|
2014-01-06 05:21:05 +08:00
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
lion.on('mouseleave', function () {
|
2017-07-29 00:40:07 +08:00
|
|
|
document.body.style.cursor = 'default';
|
|
|
|
});
|
2014-01-06 05:21:05 +08:00
|
|
|
|
2017-07-29 00:40:07 +08:00
|
|
|
Konva.pixelRatio = undefined;
|
|
|
|
done();
|
|
|
|
};
|
|
|
|
imageObj.src = 'assets/lion.png';
|
2017-02-24 22:15:33 +08:00
|
|
|
|
2017-07-29 00:40:07 +08:00
|
|
|
showHit(layer);
|
|
|
|
});
|
2017-02-24 22:15:33 +08:00
|
|
|
|
|
|
|
// ======================================================
|
2021-05-04 06:09:18 +08:00
|
|
|
it('image hit region with alpha threshold, mouseover circle', function (done) {
|
2017-02-24 22:15:33 +08:00
|
|
|
var stage = addStage();
|
|
|
|
var layer = new Konva.Layer();
|
|
|
|
stage.add(layer);
|
|
|
|
|
|
|
|
var group = new Konva.Group();
|
|
|
|
|
|
|
|
var circle = new Konva.Circle({
|
|
|
|
x: 50,
|
|
|
|
y: 50,
|
|
|
|
fill: 'red',
|
2020-05-08 22:59:35 +08:00
|
|
|
radius: 40,
|
2014-01-06 05:21:05 +08:00
|
|
|
});
|
2017-02-24 22:15:33 +08:00
|
|
|
var rect = new Konva.Rect({
|
|
|
|
width: 100,
|
|
|
|
height: 100,
|
|
|
|
fill: 'green',
|
2020-05-08 22:59:35 +08:00
|
|
|
opacity: 0.5,
|
2015-02-14 23:12:54 +08:00
|
|
|
});
|
2017-02-24 22:15:33 +08:00
|
|
|
group.add(rect, circle);
|
|
|
|
|
|
|
|
group.toImage({
|
|
|
|
width: 100,
|
|
|
|
height: 100,
|
2020-05-08 22:59:35 +08:00
|
|
|
callback: function (img) {
|
2017-02-24 22:15:33 +08:00
|
|
|
var image = new Konva.Image({
|
2020-05-08 22:59:35 +08:00
|
|
|
image: img,
|
2015-02-14 23:12:54 +08:00
|
|
|
});
|
2017-02-24 22:15:33 +08:00
|
|
|
image.cache();
|
|
|
|
image.drawHitFromCache(200);
|
|
|
|
layer.add(image);
|
|
|
|
layer.draw();
|
|
|
|
var shape = layer.getIntersection({
|
|
|
|
x: 5,
|
2020-05-08 22:59:35 +08:00
|
|
|
y: 5,
|
2015-02-14 23:12:54 +08:00
|
|
|
});
|
2015-02-16 07:31:28 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
assert.equal(!!shape, false, 'shape should not be detected');
|
2015-02-16 07:31:28 +08:00
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
image.on('mouseenter', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
document.body.style.cursor = 'pointer';
|
2015-02-16 07:31:28 +08:00
|
|
|
});
|
|
|
|
|
2020-05-08 22:59:35 +08:00
|
|
|
image.on('mouseleave', function () {
|
2017-02-24 22:15:33 +08:00
|
|
|
document.body.style.cursor = 'default';
|
2015-02-16 07:31:28 +08:00
|
|
|
});
|
2017-02-24 22:15:33 +08:00
|
|
|
done();
|
2020-05-08 22:59:35 +08:00
|
|
|
},
|
2015-02-16 07:31:28 +08:00
|
|
|
});
|
2015-04-14 11:49:33 +08:00
|
|
|
|
2017-02-24 22:15:33 +08:00
|
|
|
showHit(layer);
|
|
|
|
});
|
2015-02-16 07:31:28 +08:00
|
|
|
});
|