konva/test/manual/Manual-test.ts

417 lines
9.1 KiB
TypeScript
Raw Normal View History

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 () {
// ======================================================
2021-05-04 06:09:18 +08:00
it('oscillation animation', function () {
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,
});
// 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);
anim.start();
});
// ======================================================
2021-05-04 06:09:18 +08:00
it('rotation animation', function () {
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,
fill: 'red',
stroke: 'black',
2020-05-08 22:59:35 +08:00
strokeWidth: 4,
});
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);
anim.start();
});
// ======================================================
2021-05-04 06:09:18 +08:00
it('tween node', function () {
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,
});
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,
});
tween.play();
});
// ======================================================
2021-05-04 06:09:18 +08:00
it('tween spline', function () {
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,
});
layer.add(spline);
stage.add(layer);
var tween = new Konva.Tween({
node: spline,
duration: 1,
//x: 100,
points: [200, 160, 200, 23, 500, 109, 100, 10],
easing: Konva.Easings.BackEaseOut,
2020-05-08 22:59:35 +08:00
yoyo: false,
});
// 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 () {
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,
});
layer.add(spline);
stage.add(layer);
spline.cache({
width: stage.width(),
2020-05-08 22:59:35 +08:00
height: stage.height(),
});
spline.filters([Konva.Filters.Blur]).blurRadius(40);
layer.draw();
2020-05-08 22:59:35 +08:00
layer.on('beforeDraw', function () {
spline.cache({
width: stage.width(),
2020-05-08 22:59:35 +08:00
height: stage.height(),
});
});
var tween = new Konva.Tween({
node: spline,
duration: 2,
//x: 100,
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,
});
// 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('Make sure that all texts are inside rectangles.', function () {
var stage = addStage();
var layer = new Konva.Layer();
var text = new Konva.Text({
fontSize: 50,
y: 5,
x: 25,
fill: 'black',
2020-05-08 22:59:35 +08:00
text: 'text',
});
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',
});
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',
});
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',
});
layer.add(rect, text);
stage.add(layer);
});
2021-05-04 06:09:18 +08:00
it('change hit graph ratio', function () {
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,
});
var text = new Konva.Text({
2020-05-08 22:59:35 +08:00
text: 'click on circle to decrease hit grpah retion',
});
layer.add(circle, text);
stage.add(layer);
showHit(layer);
2020-05-08 22:59:35 +08:00
circle.on('mouseenter', function () {
document.body.style.cursor = 'pointer';
});
2020-05-08 22:59:35 +08:00
circle.on('mouseleave', function () {
document.body.style.cursor = 'default';
});
2020-05-08 22:59:35 +08:00
circle.on('click', function () {
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 () {
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,
radius: 70,
fill: 'red',
stroke: 'blue',
strokeWidth: 4,
2021-05-04 06:09:18 +08:00
shadowOffx: 10,
shadowOffsetY: 10,
2020-05-08 22:59:35 +08:00
shadowColor: 'black',
});
var text = new Konva.Text({
2020-05-08 22:59:35 +08:00
text: 'click on circle to start tween',
});
layer.add(circle, text);
stage.add(layer);
2020-05-08 22:59:35 +08:00
circle.on('click', function () {
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(),
});
tween.play();
});
});
// ======================================================
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-07-29 00:40:07 +08:00
Konva.pixelRatio = 2;
var stage = addStage();
var layer = new Konva.Layer();
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-07-29 00:40:07 +08:00
showHit(layer);
});
// ======================================================
2021-05-04 06:09:18 +08:00
it('image hit region with alpha threshold, mouseover circle', function (done) {
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
});
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
});
group.add(rect, circle);
group.toImage({
width: 100,
height: 100,
2020-05-08 22:59:35 +08:00
callback: function (img) {
var image = new Konva.Image({
2020-05-08 22:59:35 +08:00
image: img,
2015-02-14 23:12:54 +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
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 () {
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 () {
document.body.style.cursor = 'default';
2015-02-16 07:31:28 +08:00
});
done();
2020-05-08 22:59:35 +08:00
},
2015-02-16 07:31:28 +08:00
});
showHit(layer);
});
2015-02-16 07:31:28 +08:00
});