📜  语义 UI 调光器变体(1)

📅  最后修改于: 2023-12-03 15:28:10.285000             🧑  作者: Mango

语义 UI 调光器变体

语义 UI 是一种基于语义学的用户界面设计理念,旨在通过凸显用户在操作上的意图和目的,使得用户界面的使用方式更加直观、自然和轻松。而调光器是家庭生活中常见而重要的装置,可以帮助用户灵活地调节房间的亮度和氛围,提高居住体验。

那么,结合语义 UI 的设计理念,我们可以设计出一种更加符合用户操作习惯和期望的语义 UI 调光器变体。

设计思路
1. 根据语义概念设计控件

首先,我们需要根据控件的功能和使用场景设计相应的语义概念,以帮助用户更好地理解和使用。在调光器的场景下,我们可以从亮度、温度或颜色等方面出发,设计对应的语义概念。

比如,我们可以设计出以下几个语义概念:

  • 亮度(Brightness):用于调节房间的明暗程度;
  • 色温(Color Temperature):用于调节灯光的色彩温度,适合不同氛围和场景;
  • 颜色(Color):用于调节灯光的颜色,打造不同的氛围和环境。
2. 使用自然语言控制

其次,我们可以采用自然语言识别技术,让用户直接使用语音或文字输入,控制调光器的亮度、色温或颜色等属性。

用户可以说出想要的亮度或温度,比如“亮一点”、“稍微暖一点”等,系统会根据语义识别技术,自动转化为对应的数值,并控制灯光变化。同样的,用户也可以直接输入相关指令,比如“设置颜色为红色”、“将亮度降低至 50%”等。

3. 显示语义状态

最后,我们可以通过直观的图形化界面,将当前的语义状态以及调节效果展现给用户,让用户能够更好地理解当前操作的状态与结果。

比如,在控制亮度的场景下,我们可以在界面上展示一个亮度条,根据当前亮度值自动调节位置。同时,也可以在界面上增加一些精致图案或小动画,增加友好感和趣味性。

代码实现

根据以上设计思路,我们可以用 React 和 Ant Design 中的 Slider 和 Radio 等组件,来实现这个语义 UI 调光器变体。

具体代码见下方:

import React, { useState } from 'react';
import { Slider, Radio } from 'antd';

const BrightnessSlider = (props) => {
  const { value, onChange } = props;

  return (
    <div>
      <div className="slider-label">亮度</div>
      <div className="slider-wrapper">
        <Slider
          min={0}
          max={100}
          value={value}
          onChange={onChange}
        />
      </div>
      <div className="slider-status">{value}</div>
    </div>
  );
};

const ColorTemperatureRadio = (props) => {
  const { value, onChange } = props;
  const temperatures = [
    { label: '暖', value: 'warm' },
    { label: '自然', value: 'natural' },
    { label: '冷', value: 'cold' },
  ];

  return (
    <div>
      <div className="radio-label">色温</div>
      <Radio.Group
        options={temperatures}
        value={value}
        onChange={onChange}
      />
      <div className="radio-status">当前选择:{value}</div>
    </div>
  );
};

const ColorRadio = (props) => {
  const { value, onChange } = props;
  const colors = [
    { label: '红', value: 'red' },
    { label: '黄', value: 'yellow' },
    { label: '蓝', value: 'blue' },
  ];

  return (
    <div>
      <div className="radio-label">颜色</div>
      <Radio.Group
        options={colors}
        value={value}
        onChange={onChange}
      />
      <div className="radio-status">当前选择:{value}</div>
    </div>
  );
};

const SemanticDimmer = () => {
  const [brightness, setBrightness] = useState(50);
  const [colorTemperature, setColorTemperature] = useState('natural');
  const [color, setColor] = useState('red');

  const handleBrightnessChange = (value) => {
    setBrightness(value);
  };

  const handleColorTemperatureChange = (e) => {
    setColorTemperature(e.target.value);
  };

  const handleColorChange = (e) => {
    setColor(e.target.value);
  };

  return (
    <div className="semantic-dimmer">
      <div className="semantic-dimmer-status">
        当前亮度:{brightness}
      </div>
      <BrightnessSlider
        value={brightness}
        onChange={handleBrightnessChange}
      />
      <ColorTemperatureRadio
        value={colorTemperature}
        onChange={handleColorTemperatureChange}
      />
      {
        colorTemperature === 'warm' &&
        <ColorRadio
          value={color}
          onChange={handleColorChange}
        />
      }
    </div>
  );
};

其中,BrightnessSlider 组件用于控制亮度,ColorTemperatureRadio 和 ColorRadio 用于控制色温和颜色。在 SemanticDimmer 组件中,通过 useState 钩子函数,分别维护了当前亮度、色温状态和颜色状态,并注册了相应的事件处理函数,实现控件交互。

总结

通过以上设计思路和代码示例,我们可以看出,采用语义 UI 的设计理念,可以帮助用户更快、更直观地理解和使用控件,提高用户体验。在具体代码实现中,我们可以灵活运用 React 和 Ant Design 等工具,快速实现语义 UI 控件的开发和交互。