完成RGB颜色合成选择器组件。
This commit is contained in:
parent
91206e90d3
commit
795c97f36d
0
src/components/RGBAssemble.module.css
Normal file
0
src/components/RGBAssemble.module.css
Normal file
70
src/components/RGBAssemble.tsx
Normal file
70
src/components/RGBAssemble.tsx
Normal file
|
@ -0,0 +1,70 @@
|
|||
import { useEffect, useMemo, useState } from 'react';
|
||||
import { useColorFunction } from '../ColorFunctionContext';
|
||||
import { ColorRangePicker } from './ColorRangePicker';
|
||||
|
||||
type RGBAssembleProps = {
|
||||
color: string | null;
|
||||
onChange: (color: string) => void;
|
||||
};
|
||||
|
||||
export function RGBAssemble({ color = '000000', onChange }: RGBAssembleProps) {
|
||||
const { colorFn } = useColorFunction();
|
||||
const rgbComponents = useMemo(() => {
|
||||
try {
|
||||
const [r, g, b] = colorFn?.represent_rgb(color) ?? [0, 0, 0];
|
||||
return [r, g, b];
|
||||
} catch (error) {
|
||||
console.error('[Convert RGB]', error);
|
||||
}
|
||||
return [0, 0, 0];
|
||||
}, [color]);
|
||||
const [r, setR] = useState(0);
|
||||
const [g, setG] = useState(0);
|
||||
const [b, setB] = useState(0);
|
||||
|
||||
useEffect(() => {
|
||||
try {
|
||||
const newColor = colorFn?.rgb_to_hex(r, g, b) ?? '000000';
|
||||
onChange(newColor);
|
||||
} catch (error) {
|
||||
console.error('[Convert RGB]', error);
|
||||
}
|
||||
}, [r, g, b]);
|
||||
useEffect(() => {
|
||||
setR(rgbComponents[0]);
|
||||
setG(rgbComponents[1]);
|
||||
setB(rgbComponents[2]);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div>
|
||||
<ColorRangePicker
|
||||
title="Red"
|
||||
startColor="rgb(0, 0, 0)"
|
||||
endColor="rgb(255, 0, 0)"
|
||||
max={255}
|
||||
step={1}
|
||||
value={r}
|
||||
onChange={setR}
|
||||
/>
|
||||
<ColorRangePicker
|
||||
title="Green"
|
||||
startColor="rgb(0, 0, 0)"
|
||||
endColor="rgb(0, 255, 0)"
|
||||
max={255}
|
||||
step={1}
|
||||
value={g}
|
||||
onChange={setG}
|
||||
/>
|
||||
<ColorRangePicker
|
||||
title="Blue"
|
||||
startColor="rgb(0, 0, 0)"
|
||||
endColor="rgb(0, 0, 255)"
|
||||
max={255}
|
||||
step={1}
|
||||
value={b}
|
||||
onChange={setB}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
Loading…
Reference in New Issue
Block a user