Konva.js适用于创建各种交互式和动态的应用场景,如:
<script src="https://unpkg.com/konva@9/konva.min.js"></script>
npm install konva --save
然后在JavaScript中引入:
import Konva from 'konva';
在tsconfig.json
中添加DOM定义:
{
"compilerOptions": {
"lib": [
"es6",
"dom"
]
}
}
以下是一个基本的Konva.js使用示例,创建一个可拖动的矩形:
<div id="container"></div>
<script>
var stage = new Konva.Stage({
container: 'container',
width: window.innerWidth,
height: window.innerHeight,
});
var layer = new Konva.Layer();
stage.add(layer);
var box = new Konva.Rect({
x: 50,
y: 50,
width: 100,
height: 50,
fill: '#00D2FF',
stroke: 'black',
strokeWidth: 4,
draggable: true,
});
layer.add(box);
box.on('mouseover', function () {
document.body.style.cursor = 'pointer';
});
box.on('mouseout', function () {
document.body.style.cursor = 'default';
});
</script>
var stage = new Konva.Stage({
container: 'container',
width: 500,
height: 500,
});
var layer = new Konva.Layer();
stage.add(layer);
var circle = new Konva.Circle({
x: stage.width() / 2,
y: stage.height() / 2,
radius: 70,
fill: 'red',
stroke: 'black',
strokeWidth: 4,
});
layer.add(circle);
circle.on('click', function () {
alert('Circle clicked!');
});
var amplitude = 100;
var period = 2000;
var centerX = stage.width() / 2;
var anim = new Konva.Animation(function (frame) {
circle.x(amplitude * Math.sin((frame.time * 2 * Math.PI) / period) + centerX);
}, layer);
anim.start();
var dataURL = stage.toDataURL({ pixelRatio: 3 });
Konva.js可以与React集成,通过react-konva
库实现。安装依赖:
npm install react-konva konva
在React组件中使用:
import React from 'react';
import { Stage, Layer, Rect } from 'react-konva';
const App = () => (
<Stage width={window.innerWidth} height={window.innerHeight}>
<Layer>
<Rect
x={20}
y={20}
width={100}
height={100}
fill="red"
draggable
/>
</Layer>
</Stage>
);
export default App;