增加色轮色调和变化步长的设置功能。

This commit is contained in:
徐涛 2025-01-06 09:51:44 +08:00
parent c30148427b
commit 76e9e81306
3 changed files with 18 additions and 5 deletions

View File

@ -27,19 +27,21 @@ type ColorWheelProps = {
actived: boolean; actived: boolean;
rotate: number; rotate: number;
rootColor: string; rootColor: string;
tones: number;
step: number;
}; };
export function ColorColumn({ actived, rotate, rootColor }: ColorWheelProps) { export function ColorColumn({ actived, rotate, rootColor, tones, step }: ColorWheelProps) {
const { colorFn } = useColorFunction(); const { colorFn } = useColorFunction();
const colorSeries = useMemo(() => { const colorSeries = useMemo(() => {
try { try {
const colors = colorFn?.series(rootColor, 4, 0.16); const colors = colorFn?.series(rootColor, tones, step / 100);
return (colors ?? Array.from({ length: 9 }, () => rootColor)).reverse(); return (colors ?? Array.from({ length: 9 }, () => rootColor)).reverse();
} catch (e) { } catch (e) {
console.error('[Generate Color Series]', e); console.error('[Generate Color Series]', e);
} }
return Array.from({ length: 9 }, () => rootColor); return Array.from({ length: 9 }, () => rootColor);
}, [rootColor]); }, [rootColor, tones, step]);
return ( return (
<div <div

View File

@ -16,6 +16,8 @@ type ColorWheelProps = {
| 'tetradic' | 'tetradic'
| 'flip_tetradic' | 'flip_tetradic'
| 'square'; | 'square';
tones?: number;
step?: number;
}; };
const wheelRotates = [0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330]; const wheelRotates = [0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330];
@ -33,6 +35,8 @@ const highlightSeries = {
export function ColorWheel({ export function ColorWheel({
originColor = '000000', originColor = '000000',
highlightMode = 'complementary', highlightMode = 'complementary',
tones = 4,
step = 10,
}: ColorWheelProps) { }: ColorWheelProps) {
const { colorFn } = useColorFunction(); const { colorFn } = useColorFunction();
const wheelColors = useMemo(() => { const wheelColors = useMemo(() => {
@ -58,6 +62,8 @@ export function ColorWheel({
rootColor={color} rootColor={color}
rotate={rotate} rotate={rotate}
actived={includes(highlightSeries[highlightMode], rotate)} actived={includes(highlightSeries[highlightMode], rotate)}
tones={tones}
step={step}
/> />
))} ))}
</div> </div>

View File

@ -12,7 +12,7 @@ export function Wheels() {
const [selectedColor, setSelectedColor] = useAtom(currentPickedColor); const [selectedColor, setSelectedColor] = useAtom(currentPickedColor);
const [selectedMode, setSelectedMode] = useState('complementary'); const [selectedMode, setSelectedMode] = useState('complementary');
const [steps, setSteps] = useState(10); const [steps, setSteps] = useState(10);
const [tones, setTones] = useState(4); const [tones, setTones] = useState(3);
return ( return (
<div className={cx('workspace', styles.wheels_workspace)}> <div className={cx('workspace', styles.wheels_workspace)}>
@ -64,7 +64,12 @@ export function Wheels() {
</div> </div>
</aside> </aside>
<div className={styles.wheel_side}> <div className={styles.wheel_side}>
<ColorWheel originColor={selectedColor} highlightMode={selectedMode} /> <ColorWheel
originColor={selectedColor}
highlightMode={selectedMode}
tones={tones}
step={steps}
/>
</div> </div>
</section> </section>
</div> </div>