JavaScript is required

展开/收缩 按钮自定义

自定义展开器插槽

演示如何使用插槽完全自定义展开/折叠按钮,包含自定义图标、动画和行为。

自定义展开器插槽

功能概述

此示例演示如何使用插槽完全自定义展开/折叠按钮组件,允许自定义图标、动画和行为。

核心特性实现

自定义展开器组件

创建自定义展开/折叠按钮:

const MyExpandHolder = ({ node, onToggle }: { node: RGNode, onToggle: () => void }) => {
    return (
        <div
            className="custom-expand-button"
            onClick={onToggle}
        >
            {node.collapsed ? '+' : '-'}
        </div>
    );
};

插槽集成

在节点插槽中使用自定义组件:

<RGSlotOnNode>
    {({ node }: RGNodeSlotProps) => (
        <>
            <div>{node.text}</div>
            {node.lot.childs.length > 0 && (
                <MyExpandHolder
                    node={node}
                    onToggle={() => graphInstance.toggleNodeCollapsed(node)}
                />
            )}
        </>
    )}
</RGSlotOnNode>

动画过渡

展开/折叠时添加动画:

const toggleWithAnimation = async (node: RGNode) => {
    graphInstance.enableCanvasAnimation();
    graphInstance.toggleNodeCollapsed(node);
    await graphInstance.sleep(300);
    graphInstance.disableCanvasAnimation();
};

创意使用场景

  • 品牌 UI:使展开按钮与设计系统匹配
  • 图标库:使用特定的图标集(FontAwesome、Material)
  • 动画按钮:自定义悬停和单击动画
  • 上下文感知:不同节点类型的不同图标
  • 无障碍:高对比度或更大的按钮以提高可见性