Skip to content

Splitter 布局分割器

创建可拖拽调整尺寸的多面板布局。手柄在悬浮、拖拽或键盘聚焦时显示。

命令行安装

bash
npx @loongship-kit/ui add splitter

组件结构

角色组件职责使用条件
根组件SplitterGroup管理方向、尺寸和布局持久化必需
面板SplitterPanel声明可调整尺寸的内容区域至少两个
调整手柄SplitterResizeHandle提供拖拽和键盘调整交互相邻面板间需要

水平分割

Navigation
Vessel workspace
查看代码
vue
<script setup lang="ts">
import { SplitterGroup, SplitterPanel, SplitterResizeHandle } from '@/components/loongship/splitter'
</script>

<template>
  <div style="height: 240px;">
    <SplitterGroup>
      <SplitterPanel :default-size="35" :min-size="20">
        <div>Navigation</div>
      </SplitterPanel>
      <SplitterResizeHandle />
      <SplitterPanel :default-size="65" :min-size="30">
        <div>Vessel workspace</div>
      </SplitterPanel>
    </SplitterGroup>
  </div>
</template>

垂直分割

设置 direction="vertical" 创建上下分割布局。手柄会自动切换为纵向调整光标和水平反馈线。

Chart
Voyage table
查看代码
vue
<script setup lang="ts">
import { SplitterGroup, SplitterPanel, SplitterResizeHandle } from '@/components/loongship/splitter'
</script>

<template>
  <div style="height: 240px;">
    <SplitterGroup direction="vertical">
      <SplitterPanel :default-size="45" :min-size="25">
        <div>Chart</div>
      </SplitterPanel>
      <SplitterResizeHandle />
      <SplitterPanel :default-size="55" :min-size="25">
        <div>Voyage table</div>
      </SplitterPanel>
    </SplitterGroup>
  </div>
</template>

尺寸约束、折叠与持久化

尺寸单位与持久化

面板尺寸默认使用百分比。设置 size-unit="px" 后,defaultSizeminSizemaxSizecollapsedSize 均使用像素。autoSaveId 会通过 localStorage 保存同一组面板的布局。

Collapsible tools
Main content
查看代码
vue
<script setup lang="ts">
import { SplitterGroup, SplitterPanel, SplitterResizeHandle } from '@/components/loongship/splitter'
</script>

<template>
  <div style="height: 240px;">
    <SplitterGroup auto-save-id="vessel-workspace">
      <SplitterPanel
        collapsible
        :collapsed-size="0"
        :default-size="30"
        :min-size="15"
        :max-size="50"
      >
        <div>Collapsible tools</div>
      </SplitterPanel>
      <SplitterResizeHandle />
      <SplitterPanel :default-size="70" :min-size="40">
        <div>Main content</div>
      </SplitterPanel>
    </SplitterGroup>
  </div>
</template>

API

SplitterGroup(主组件)

属性

属性类型默认值说明
direction'horizontal' | 'vertical''horizontal'面板排列和调整方向
autoSaveIdstring | nullnull用于持久化布局的唯一标识
keyboardResizeBynumber | null10方向键每次调整的比例步长
storage{ getItem; setItem }localStorage自定义布局存储实现
idstring | null自动生成分割组唯一标识
asstring | Component'div'渲染元素
asChildbooleanfalse将属性合并到唯一子元素
classClassValue-自定义类名

事件

事件参数说明
layoutsizes: number[]初始化或调整后触发,返回各面板尺寸

插槽

插槽参数说明
default{ layout: number[] }当前面板尺寸

子组件

SplitterPanel — 可调整尺寸的内容面板

属性

属性类型默认值说明
defaultSizenumber自动均分初始尺寸
minSizenumber10最小尺寸
maxSizenumber100最大尺寸
collapsiblebooleanfalse是否允许折叠
collapsedSizenumber0折叠后的尺寸
sizeUnit'%' | 'px''%'尺寸属性使用的单位
ordernumberDOM 顺序条件渲染面板时的稳定顺序
idstring自动生成面板唯一标识
asstring | Component'div'渲染元素
asChildbooleanfalse将属性合并到唯一子元素
classClassValue-自定义类名

事件

事件参数说明
collapse面板折叠后触发
expand面板展开后触发
resize(size: number, previousSize: number)面板尺寸变化后触发

插槽

插槽参数说明
default{ isCollapsed, isExpanded, collapse, expand, resize }面板状态与控制方法

暴露成员

成员类型说明
collapse()() => void折叠可折叠面板
expand()() => void恢复到折叠前尺寸
resize(size)(size: number) => void调整到指定尺寸
getSize()() => number获取当前尺寸
isCollapsedboolean当前是否折叠
isExpandedboolean当前是否展开
SplitterResizeHandle — 拖拽与键盘调整手柄

属性

属性类型默认值说明
disabledbooleanfalse禁用拖拽和键盘调整
hitAreaMargins{ coarse?: number; fine?: number }{ coarse: 15, fine: 5 }触摸和鼠标命中区边距
tabindexnumber0键盘 Tab 顺序
idstring自动生成手柄唯一标识
noncestring全局配置动态光标样式的 CSP nonce
asstring | Component'div'渲染元素
asChildbooleanfalse将属性合并到唯一子元素
classClassValue-自定义类名

事件

事件参数说明
draggingisDragging: boolean拖拽开始和结束时触发

插槽

插槽参数说明
default可选的自定义手柄内容;默认不渲染抓手图标

键盘操作与嵌套

手柄使用 role="separator",支持方向键、HomeEndF6 键盘操作。嵌套布局只需在任意 SplitterPanel 内继续放置一组 SplitterGroup