HTML5 Canvas 变换和调整事件
Konva.Transformer
对象具有特殊的变换事件,可以在您的应用程序中使用:transformstart
、transform
和 transformend
。
这些事件同样会在附加的节点上触发。
说明:打开控制台,尝试进行变换,查看日志
- Vanilla
- React
- Vue
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(); stage.add(layer); const rect = new Konva.Rect({ x: 50, y: 50, width: 100, height: 100, fill: 'yellow', stroke: 'black', draggable: true, }); layer.add(rect); const tr = new Konva.Transformer({ nodes: [rect], }); layer.add(tr); tr.on('transformstart', () => { console.log('变换开始'); }); tr.on('transform', () => { console.log('正在变换'); }); tr.on('transformend', () => { console.log('变换结束'); }); rect.on('transformstart', () => { console.log('矩形变换开始'); }); rect.on('transform', () => { console.log('矩形正在变换'); }); rect.on('transformend', () => { console.log('矩形变换结束'); });
import { Stage, Layer, Rect, Transformer } from 'react-konva'; import { useRef, useEffect } from 'react'; const App = () => { const rectRef = useRef(); const trRef = useRef(); useEffect(() => { trRef.current.nodes([rectRef.current]); }, []); return ( <Stage width={window.innerWidth} height={window.innerHeight}> <Layer> <Rect x={50} y={50} width={100} height={100} fill="yellow" stroke="black" draggable ref={rectRef} onTransformStart={() => console.log('矩形变换开始')} onTransform={() => console.log('矩形正在变换')} onTransformEnd={() => console.log('矩形变换结束')} /> <Transformer ref={trRef} onTransformStart={() => console.log('变换开始')} onTransform={() => console.log('正在变换')} onTransformEnd={() => console.log('变换结束')} /> </Layer> </Stage> ); }; export default App;
<template> <v-stage :config="stageSize"> <v-layer> <v-rect :config="rectConfig" ref="rectRef" @transformstart="() => console.log('矩形变换开始')" @transform="() => console.log('矩形正在变换')" @transformend="() => console.log('矩形变换结束')" /> <v-transformer :config="transformerConfig" ref="transformerRef" @transformstart="() => console.log('变换开始')" @transform="() => console.log('正在变换')" @transformend="() => console.log('变换结束')" /> </v-layer> </v-stage> </template> <script setup> import { ref, onMounted } from 'vue'; const stageSize = { width: window.innerWidth, height: window.innerHeight }; const rectConfig = { x: 50, y: 50, width: 100, height: 100, fill: 'yellow', stroke: 'black', draggable: true }; const transformerConfig = {}; const rectRef = ref(null); const transformerRef = ref(null); onMounted(() => { transformerRef.value.getNode().nodes([rectRef.value.getNode()]); }); </script>