HTML5 Canvas 使用 globalCompositeOperation 的混合模式教程
使用 Konva 框架,可以通过 globalCompositeOperation 属性设置 globalCompositeOperation 或混合模式操作。
操作说明:将红色矩形拖到绿色文本上,查看 XOR 混合效果。
- Vanilla
- React
- Vue
import Konva from 'konva';
const stage = new Konva.Stage({
container: 'container',
width: window.innerWidth,
height: window.innerHeight
});
const layer = new Konva.Layer();
const text = new Konva.Text({
text: 'Text Shadow!',
fontFamily: 'Calibri',
fontSize: 40,
x: 20,
y: 20,
fill: 'green',
shadowColor: 'white',
shadowOffset: { x: 10, y: 10 }
});
layer.add(text);
const rect = new Konva.Rect({
x: 50,
y: 50,
width: 100,
height: 100,
fill: 'red',
draggable: true,
globalCompositeOperation: 'xor'
});
layer.add(rect);
stage.add(layer);
import { Stage, Layer, Text, Rect } from 'react-konva';
import { useState } from 'react';
const App = () => {
const [position, setPosition] = useState({ x: 50, y: 50 });
return (
<Stage width={window.innerWidth} height={window.innerHeight}>
<Layer>
<Text
text="Text Shadow!"
fontFamily="Calibri"
fontSize={40}
x={20}
y={20}
fill="green"
shadowColor="white"
shadowOffset={{ x: 10, y: 10 }}
/>
<Rect
x={position.x}
y={position.y}
width={100}
height={100}
fill="red"
draggable={true}
onDragEnd={(e) => {
setPosition({ x: e.target.x(), y: e.target.y() });
}}
globalCompositeOperation="xor"
/>
</Layer>
</Stage>
);
};
export default App;
<template>
<v-stage :config="stageSize">
<v-layer>
<v-text :config="textConfig" />
<v-rect :config="rectConfig" />
</v-layer>
</v-stage>
</template>
<script setup>
const stageSize = {
width: window.innerWidth,
height: window.innerHeight
};
const textConfig = {
text: 'Text Shadow!',
fontFamily: 'Calibri',
fontSize: 40,
x: 20,
y: 20,
fill: 'green',
shadowColor: 'white',
shadowOffset: { x: 10, y: 10 }
};
const rectConfig = {
x: 50,
y: 50,
width: 100,
height: 100,
fill: 'red',
draggable: true,
globalCompositeOperation: 'xor'
};
</script>