JavaScript is required

节点-内容及样式3

3D 图标按钮节点与力导向布局

本示例展示了如何在 relation-graph 中使用纯 CSS 样式创建具有视觉冲击力的 3D 风格图标按钮节点。图谱使用力导向布局来自动定位节点,每个节点渲染为具有分层 3D 效果和悬停状态的圆形图标按钮。该实现展示了 RGSlotOnNode 如何用于创建完全自定义的节点外观,远远超越简单的矩形或圆形节点。

关键特性包括:使用分层 span 元素的自定义 CSS 3D 按钮样式、具有透明节点的力导向布局配置、使用 node.data 属性的图标数据集成,以及用于完全节点自定义的 RGSlotOnNode 集成。该示例演示了创建应用程序启动器、服务状态指示器、控制面板和具有视觉反馈的游戏界面。

3D 图标按钮节点与力导向布局

功能概述

本示例展示了如何在 relation-graph 中使用纯 CSS 样式创建具有视觉冲击力的 3D 风格图标按钮节点。图谱使用力导向布局来自动定位节点,每个节点渲染为具有分层 3D 效果和悬停状态的圆形图标按钮。该实现展示了 RGSlotOnNode 如何用于创建完全自定义的节点外观,远远超越简单的矩形或圆形节点。

核心特性实现

自定义 CSS 3D 按钮样式

节点自定义通过专用的 CustomNodeComponent 实现,渲染 3D 风格的按钮:

const CustomNodeComponent: React.FC<RGNodeSlotProps> = ({ node }) => {
    return (
        <div>
            <button className={`icon-btn icon-btn--${node.data?.icon}`} type="button">
                <span className="icon-btn__back"></span>
                <span className="icon-btn__front">
                    <CircumIcon color="#ffffff" size="30px" name={node.data?.icon} />
                </span>
                <span className="icon-btn__label">{node.text}</span>
            </button>
        </div>
    );
};

3D 效果通过 CSS 分层实现,使用多个 span 元素提供深度、阴影和悬停动画。

力导向布局配置

图谱使用力导向布局进行自动节点定位:

const graphOptions: RGOptions = {
    debug: true,
    defaultLineColor: 'rgba(255, 255, 255, 0.6)',
    defaultNodeColor: 'transparent',
    defaultNodeShape: RGNodeShape.rect,
    backgroundColor: '#d2a904',
    toolBarDirection: 'h',
    toolBarPositionH: 'right',
    toolBarPositionV: 'bottom',
    defaultLineShape: RGLineShape.StandardStraight,
    layout: {
        layoutName: 'force',
        maxLayoutTimes: 80000
    }
};

关键配置包括:

  • 透明节点:自定义样式覆盖默认节点外观
  • 黄色背景:与白色线条和图标形成对比
  • 力导向布局maxLayoutTimes: 80000 允许更长的模拟时间以获得更好的定位
  • 直线连接StandardStraight 用于直接连接

图标数据集成

每个节点的 data 属性中包含自定义图标数据:

nodes: [
    { id: 'a', text: 'a', data: { icon: 'football' } },
    { id: 'b', text: 'b', data: { icon: 'fries' } },
    { id: 'b1', text: 'b1', data: { icon: 'delivery_truck' } },
    // ... 更多带有图标的节点
]

图标名称通过 slot 组件中的 node.data?.icon 访问,并传递给 CircumIcon 组件进行渲染。

RGSlotOnNode 集成

自定义组件通过 slot 集成:

<RelationGraph options={graphOptions} onNodeClick={onNodeClick} onLineClick={onLineClick}>
    <RGSlotOnNode>
        {({ node, checked, dragging }: RGNodeSlotProps) => (
            <CustomNodeComponent node={node} checked={checked} dragging={dragging} />
        )}
    </RGSlotOnNode>
</RelationGraph>

slot 提供 checkeddragging 状态,可用于条件样式,虽然此示例专注于视觉 3D 效果。

创意使用场景

交互式仪表板节点

3D 按钮样式适用于:

  • 应用程序启动器:用户可以点击打开功能的视觉图标
  • 服务状态指示器:显示系统健康状况的动画 3D 按钮
  • 控制面板:设备或工艺控制的交互按钮
  • 游戏界面:具有视觉反馈的技能树或能力选择器

品牌定制

基于 CSS 的节点样式支持:

  • 企业形象:使用自定义颜色和效果匹配公司品牌
  • 主题变体:通过 CSS 类在不同视觉风格之间切换
  • 无障碍性:高对比度设计以提高可见性
  • 动画效果:悬停、选择或拖动时的平滑过渡

视觉分类系统

基于图标的节点组织支持:

  • 文件类型浏览器:不同文档类型的图标
  • 服务目录:可用服务的视觉表示
  • 产品目录:电商分类导航
  • 菜单系统:餐厅菜单、节目时间表或内容目录