ScifiPanelDeck
科幻面板-德克 是 TechUI Scifi 面板系列中的横向展开型容器。
它的设计灵感源自 “宽银幕画幅 (Widescreen Format)”。与传统全封闭面板不同,它的视觉重心高度集中在顶部或底部的水平横梁 ,而左右两侧则保持开放或仅保留极简连接。
它的水平横梁 可以作为标题的底座或者顶栏。
提示:该组件可以通过
ScifiPanelB2或其语义化别名ScifiPanelDeck进行调用。
基础用法
默认形态
默认情况下,B2 会渲染上下两条带有科幻倒角的横梁。组件加载时,这两条横梁会自动执行从中心向两侧展开的入场动画,瞬间提升界面的科技动态感。
vue
<template>
<div style="width: 100%; height: 150px;">
<ScifiPanelDeck>
<div class="data-stream">
<span>> System Logs Loading... [Done]</span>
<span>> Establishing Connection... [Success]</span>
</div>
</ScifiPanelDeck>
</div>
</template>
<style scoped>
.data-stream {
padding: 20px;
color: #00eeff;
font-family: monospace;
display: flex;
flex-direction: column;
justify-content: center;
}
</style>视觉变体
B2 的形态变化主要围绕“动态”和“简洁度”展开。
入场动画
B2 的标志性特征是其线条入场动画。
- animation: 控制是否开启入场动画(默认为
true)。 - aniDuration: 控制线条展开的持续时间(秒)。
对于需要快速展示信息的场景,可以缩短动画时间;对于强调仪式感的大屏开场,可以适当延长。
vue
<template>
<div class="grid">
<ScifiPanelDeck :aniDuration="1">
<div class="p-4">Fast Boot</div>
</ScifiPanelDeck>
<ScifiPanelDeck :aniDuration="3">
<div class="p-4">System Initialization...</div>
</ScifiPanelDeck>
<ScifiPanelDeck :animation="false">
<div class="p-4">Static View</div>
</ScifiPanelDeck>
</div>
</template>极简模式 (Decoration & Border)
B2 的上下横梁两端默认带有精细的几何装饰(加厚的端点或刻度)。
- decoration: false:关闭装饰后,面板变为两条纯粹的直线,风格更加极简。
- borderWidth: 增加线条厚度可强化“夹具”的物理感。
vue
<template>
<ScifiPanelDeck
:decoration="false"
:borderWidth="3"
>
<div class="simple-content">Minimal & Heavy</div>
</ScifiPanelDeck>
</template>发光效果 (Glow)
开启 glow 后,上下横梁会产生强烈的光晕,仿佛是悬浮的霓虹灯管。
vue
<template>
<ScifiPanelDeck
:glow="true"
className="neon-bar"
:backgroundOpacity="0.8"
>
<div class="status-bar">SYSTEM ONLINE</div>
</ScifiPanelDeck>
</template>CSS变量
B2 的横向结构非常适合模拟“电影字幕”或“全息横幅”。通过 CSS 变量,我们可以定义出一种具有未来感的紫罗兰风格。
案例:紫罗兰数据流 (Violet Stream)
这种风格使用紫色和洋红色的渐变,适合作为次级信息的展示容器。
vue
<template>
<ScifiPanelDeck
className="panel-violet"
:aniDuration="2"
:glow="true"
:backgroundBlur="true"
>
<div class="stream-content">
上传速率: 890 MB/s | 下载速率: 1.2 GB/s
</div>
</ScifiPanelDeck>
</template>
<style lang="less">
/* 自定义紫罗兰风格 */
.panel-violet {
/* 边框:紫色 */
--sf-panel-bd: #a855f7;
/* 背景:深紫半透明 */
--sf-panel-bg: rgba(20, 0, 40, 0.6);
/* 发光:洋红光晕 */
--sf-panel-glow: #d946ef;
/* 装饰高亮:粉色 */
--sf-panel-hlite: #f5d0fe;
}
</style>组合使用
搭配悬浮标题
ScifiPanelDeck 非常适合与 ScifiPanelTitle 配合。一种经典的布局是:将标题组件悬浮在 B2 的顶部边框中央或左侧,形成一个“带独立铭牌的显示器”效果。
vue
<template>
<div class="combo-box" style="position: relative; margin-top: 20px;">
<div style="position: absolute; top: -12px; left: 20px; z-index: 2;">
<ScifiPanelTitle text="DATA LOGS" :scale="0.8" />
</div>
<ScifiPanelDeck :backgroundBlur="true">
<div class="logs-area">
[10:00:01] Auth Check passed.<br>
[10:00:02] Module loaded.
</div>
</ScifiPanelDeck>
</div>
</template>API 参考
Props
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| animation | 入场动画。是否开启线条展开动画 | Boolean | true |
| aniDuration | 动画时长。线条展开持续时间 (秒) | Number | — |
| decoration | 是否显示线条两端的装饰端点 | Boolean | true |
| borderd | 是否显示上下边框线 | Boolean | true |
| borderWidth | 边框线条宽度 (px) | Number | — |
| backgroundOpacity | 背景颜色的不透明度 (0-1) | Number | — |
| backgroundBlur | 是否开启背景毛玻璃效果 | Boolean | false |
| glow | 是否开启外发光滤镜 | Boolean | false |
| glowOpacity | 外发光的不透明度 (0-1) | Number | — |
| rotate | 旋转/镜像模式 (x, y 等) | String | — |
| scale | 整体缩放比例 | Number | 1 |
| className | 自定义容器类名 | String | — |
CSS Variables
您可以在组件的父级或通过 className 覆盖以下变量,以控制组件的配色与外观。
| 变量名 | 说明 | 默认值参考 |
|---|---|---|
| --sf-panel-bg | 面板背景填充色 | var(--scifi-bg) |
| --sf-panel-bgop | 背景不透明度 | var(--cpt-panel-bgop, 1) |
| --sf-panel-bd | 边框线条颜色 | var(--scifi-bd) |
| --sf-panel-bdw | 边框线条宽度 | var(--cpt-panel-bdw, 1px) |
| --sf-panel-fc | 标题文字颜色 | var(--scifi-fc) |
| --sf-panel-hlite | 高光颜色 | var(--scifi-hlite) |
| --sf-panel-focus | 焦点颜色 | var(--scifi-focus) |
| --sf-panel-glow | 内发光颜色 | var(--scifi-focus) |
| --sf-panel-glowop | 内发光不透明度 | var(--cpt-panel-glowop, .5) |
| --sf-panel-shadow | 容器阴影 | var(--shadow-weak) |
| --sf-panel-scale | 整体缩放比例 | var(--cpt-panel-scale) |