【DevUI】Splitter 分割器组件使用详解

前言

本文是关于 DevUI Splitter 分割器组件 的详细使用示例与代码说明总结文章。该组件基于 Angular ^18.0.0 版本,用于创建可交互调整区域大小的页面布局。

📐 DevUI Splitter 分割器组件使用详解

Splitter(分割器)是一个强大的布局组件,它允许用户通过拖动分隔条(Split Bar)来动态调整相邻窗格(Pane)的尺寸,非常适合构建可定制的仪表盘、代码编辑器(如VS Code)、文件管理器等界面。
在这里插入图片描述

1. 核心结构与概念

一个分割器布局由以下部分构成:

  • <d-splitter>:最外层容器,定义整个分割区域的方向和行为。
  • <d-splitter-pane>:放置在 <d-splitter> 内部的窗格,用于承载具体内容。一个分割器可以包含多个窗格。
  • 分隔条 (Split Bar):相邻窗格之间的可拖动控制条,用户通过它来调整尺寸。

2. 基本用法与代码示例

2.1 水平分割(基本用法)

这是最常见的左右分割布局,通过设置 [orientation]="'horizontal'"(或使用默认值)实现。

<d-splitter style="height: 300px;">
  <d-splitter-pane [size]="'30%'" [minSize]="'20%'" [collapsible]="true">
    <div class="pane-content">
      <h2>左侧面板</h2>
      <div>宽度:30%, 最小宽度:20%</div>
    </div>
  </d-splitter-pane>
  <d-splitter-pane [minSize]="'15%'">
    <div class="pane-content">
      <h2>右侧面板</h2>
      <div>内容区</div>
    </div>
  </d-splitter-pane>
</d-splitter>

关键属性说明

  • [size]:设置窗格的初始大小,支持像素(px)和百分比(%)。
  • [minSize] / [maxSize]:限制窗格调整的最小和最大尺寸。
  • [collapsible]:设置为 true 时,窗格可以被完全折叠收起。
2.2 垂直分割

通过将 <d-splitter>orientation 属性设置为 vertical,可以创建上下分割的布局。

<d-splitter style="height: 500px;" orientation="vertical">
  <d-splitter-pane size="200px" minSize="100px" [collapsible]="true">
    <div class="pane-content">
      <h2>顶部面板</h2>
      <div>高度:200px</div>
    </div>
  </d-splitter-pane>
  <d-splitter-pane>
    <div class="pane-content">
      <h2>中部面板</h2>
      <div>高度自适应</div>
    </div>
  </d-splitter-pane>
  <d-splitter-pane size="100px" [resizable]="false">
    <div class="pane-content">
      <h2>底部面板</h2>
      <div>高度:100px,且不可调整大小</div>
    </div>
  </d-splitter-pane>
</d-splitter>

垂直布局要点

  • 确保外层 <d-splitter> 有明确的 height(例如 500px100%)。
  • 通过 [resizable]="false" 可以禁止某个窗格被拖动调整。
2.3 组合嵌套布局

通过嵌套多个 <d-splitter>,可以实现复杂的混合布局(如先左右分,再上下分)。

<d-splitter style="height: 500px;" orientation="vertical">
  <d-splitter-pane size="400px">
    <!-- 第一层:水平分割 -->
    <d-splitter style="height: 100%;">
      <d-splitter-pane size="30%">
        <h3>左侧</h3>
      </d-splitter-pane>
      <d-splitter-pane>
        <!-- 第二层:在右侧窗格内嵌套垂直分割 -->
        <d-splitter style="height: 100%;" orientation="vertical">
          <d-splitter-pane size="50%">
            <h3>右上</h3>
          </d-splitter-pane>
          <d-splitter-pane>
            <h3>右下</h3>
          </d-splitter-pane>
        </d-splitter>
      </d-splitter-pane>
    </d-splitter>
  </d-splitter-pane>
  <d-splitter-pane>
    <h3>底部独立区域</h3>
  </d-splitter-pane>
</d-splitter>

嵌套技巧:关键是为内层的 <d-splitter> 设置 height: 100%;,使其充满父级窗格。

3. 高级功能与控制

3.1 控制折叠方向

当一个窗格折叠时,默认会向后方after)收起。通过 [collapseDirection] 属性可以指定向前方(before)折叠。

<d-splitter-pane [collapsible]="true" [collapseDirection]="'before'">
  <div>此面板折叠时会向前方(左侧)收起</div>
</d-splitter-pane>
3.2 折叠收缩与菜单模式 (shrink)

这是一个非常实用的功能,特别用于导航侧边栏。面板折叠后不会完全隐藏,而是收缩到一个更窄的宽度,仅显示图标菜单。

<d-splitter [showCollapseButton]="true">
  <d-splitter-pane
    [size]="'200px'"
    [minSize]="'20%'"
    [collapsed]="collapsed"
    [shrink]="true"
    [shrinkWidth]="40"
    [collapsible]="true"
    (collapsedChange)="onCollapsedChange($event)"
    (shrinkStatusChange)="onShrinkStatusChange($event)">
    <!-- 正常状态显示完整菜单 -->
    <div *ngIf="!isShrinked">
      <!-- 完整菜单内容 -->
    </div>
    <!-- 收缩状态显示图标 -->
    <div *ngIf="isShrinked">
      <!-- 图标菜单内容 -->
    </div>
  </d-splitter-pane>
  <d-splitter-pane>主内容区</d-splitter-pane>
</d-splitter>

关键属性

  • [shrink]="true":启用收缩模式。
  • [shrinkWidth]:设置收缩后的宽度(如 40px)。
  • (shrinkStatusChange):监听收缩状态变化,以便切换显示完整菜单或图标。

4. 事件与交互控制

Splitter 组件提供了丰富的事件,方便你响应用户操作。

事件名触发时机说明
(sizeChange)窗格尺寸被拖动改变时事件参数为改变后的大小(像素值)
(collapsedChange)窗格折叠或展开状态切换时事件参数为当前的布尔值状态
(shrinkStatusChange)收缩模式的状态改变时用于切换显示不同UI

5. 功能特性速查表

为了方便大家根据需求快速配置,下表总结了 Splitter 组件的核心功能:

功能场景关键组件/属性代码示例或说明
基础水平分割<d-splitter> + <d-splitter-pane>默认即为水平方向,无需特别设置。
基础垂直分割<d-splitter orientation="vertical">必须为外层容器设置明确高度。
设置初始与限制尺寸[size], [minSize], [maxSize]支持 px% 单位。
允许折叠窗格[collapsible]="true"窗格可完全收起。
禁止调整大小[resizable]="false"应用于特定 <d-splitter-pane>
指定折叠方向[collapseDirection]="'before'"可选 ‘before‘‘after‘
收缩菜单模式[shrink]="true", [shrinkWidth]折叠后变为窄边图标栏。
显示折叠按钮[showCollapseButton]="true"在分隔条上显示控制按钮。
创建复杂布局嵌套 <d-splitter>注意内层容器设置为 height: 100%
响应尺寸变化(sizeChange) 事件可用来同步保存用户的布局偏好。

💡 总结与最佳实践

DevUI Splitter 组件是构建灵活、可定制用户界面的利器。要高效使用它,可以遵循以下步骤:

  1. 规划布局:先明确需要水平、垂直还是嵌套分割。
  2. 设定尺寸:为每个窗格合理设置 size, minSize, maxSize,确保布局稳定。
  3. 按需添加功能:若需折叠,添加 collapsible;若需高级导航,考虑 shrink 模式。
  4. 处理事件:通过 sizeChange 等事件保存用户布局设置,提升体验。

希望这篇文章能帮助您顺利地在项目中实现动态、专业的页面布局。

参考文档

MateChat:https://gitcode.com/DevCloudFE/MateChat

MateChat官网:https://matechat.gitcode.com

DevUI官网:https://devui.design/home

本文旨在系统阐述利用MATLAB平台执行多模态语音分离任务的方法,重点围绕LRS3数据集的数据生成流程展开。LRS3(长时RGB+音频语音数据集)作为一个规模庞大的视频与音频集合,整合了丰富的视觉与听觉信息,适用于语音识别、语音分离及情感分析等多种研究场景。MATLAB凭借其高效的数值计算能力与完备的编程环境,成为处理此类多模态任务的适宜工具。 多模态语音分离的核心在于综合利用视觉与听觉等多种输入信息来解析语音信号。具体而言,该任务的目标是从混合音频中分离出不同说话人的声音,并借助视频中的唇部运动信息作为辅助线索。LRS3数据集包含大量同步的视频与音频片段,提供RGB视频、单声道音频及对应的文本转录,为多模态语音处理算法的开发与评估提供了重要平台。其高质量与大容量使其成为该领域的关键资源。 在相关资源包中,主要包含以下两部分内容: 1. 说明文档:该文件详细阐述了项目的整体结构、代码运行方式、预期结果以及可能遇到的问题与解决方案。在进行数据处理或模型训练前,仔细阅读此文档对正确理解与操作代码至关重要。 2. 专用于语音分离任务的LRS3数据集版本:解压后可获得原始的视频、音频及转录文件,这些数据将由MATLAB脚本读取并用于生成后续训练与测试所需的数据。 基于MATLAB的多模态语音分离通常遵循以下步骤: 1. 数据预处理:从LRS3数据集中提取每段视频的音频特征与视觉特征。音频特征可包括梅尔频率倒谱系数、感知线性预测系数等;视觉特征则涉及唇部运动的检测与关键点定位。 2. 特征融合:将提取的音频特征与视觉特征相结合,构建多模态表示。融合方式可采用简单拼接、加权融合或基于深度学习模型的复杂方法。 3. 模型构建:设计并实现用于语音分离的模型。传统方法可采用自适应滤波器或矩阵分解,而深度学习方法如U-Net、Transformer等在多模态学习中表现优异。 4. 训练与优化:使用预处理后的数据对模型进行训练,并通过交叉验证与超参数调整来优化模型性能。 5. 评估与应用:采用信号失真比、信号干扰比及信号伪影比等标准指标评估模型性能。若结果满足要求,该模型可进一步应用于实际语音分离任务。 借助MATLAB强大的矩阵运算功能与信号处理工具箱,上述步骤得以有效实施。需注意的是,多模态任务常需大量计算资源,处理大规模数据集时可能需要对代码进行优化或借助GPU加速。所提供的MATLAB脚本为多模态语音分离研究奠定了基础,通过深入理解与运用这些脚本,研究者可更扎实地掌握语音分离的原理,从而提升其在实用场景中的性能表现。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值