HTML5 Canvas 图形缩放比例保持
默认情况下,当你使用角点锚点(top-left
,top-right
,bottom-left
或 bottom-right
)进行缩放时,Transformer 会保存节点的比例。
如果你不需要此行为,可以将 keepRatio
设置为 false
。
即使你将 keepRatio
设为 false,按住
SHIFT` 键仍然可以保持比例。
说明:试着调整文本的大小。
- 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 text = new Konva.Text({ x: 50, y: 50, text: '默认保持比例', fontSize: 20, draggable: true, width: 200, }); layer.add(text); const text2 = new Konva.Text({ x: 50, y: 150, text: '没有比例,但按住Shift保持比例', fontSize: 20, draggable: true, width: 200, }); layer.add(text2); const tr = new Konva.Transformer({ nodes: [text], }); layer.add(tr); const tr2 = new Konva.Transformer({ nodes: [text2], keepRatio: false, }); layer.add(tr2);
import { Stage, Layer, Text, Transformer } from 'react-konva'; import { useRef, useEffect } from 'react'; const App = () => { const text1Ref = useRef(); const text2Ref = useRef(); const tr1Ref = useRef(); const tr2Ref = useRef(); useEffect(() => { tr1Ref.current.nodes([text1Ref.current]); tr2Ref.current.nodes([text2Ref.current]); }, []); return ( <Stage width={window.innerWidth} height={window.innerHeight}> <Layer> <Text x={50} y={50} text="默认保持比例" fontSize={20} draggable width={200} ref={text1Ref} /> <Transformer ref={tr1Ref} /> <Text x={50} y={150} text="没有比例,但按住Shift保持比例" fontSize={20} draggable width={200} ref={text2Ref} /> <Transformer ref={tr2Ref} keepRatio={false} /> </Layer> </Stage> ); }; export default App;
<template> <v-stage :config="stageSize"> <v-layer> <v-text :config="text1Config" ref="text1Ref" /> <v-transformer :config="tr1Config" ref="tr1Ref" /> <v-text :config="text2Config" ref="text2Ref" /> <v-transformer :config="tr2Config" ref="tr2Ref" /> </v-layer> </v-stage> </template> <script setup> import { ref, onMounted } from 'vue'; const stageSize = { width: window.innerWidth, height: window.innerHeight }; const text1Config = { x: 50, y: 50, text: '默认保持比例', fontSize: 20, draggable: true, width: 200 }; const text2Config = { x: 50, y: 150, text: '没有比例,但按住Shift保持比例', fontSize: 20, draggable: true, width: 200 }; const tr1Config = {}; const tr2Config = { keepRatio: false }; const text1Ref = ref(null); const text2Ref = ref(null); const tr1Ref = ref(null); const tr2Ref = ref(null); onMounted(() => { tr1Ref.value.getNode().nodes([text1Ref.value.getNode()]); tr2Ref.value.getNode().nodes([text2Ref.value.getNode()]); }); </script>