3D面板
T3DPanel 是一个极具视觉冲击力的容器组件,它利用 CSS3 perspective 和 transform 属性,为内部内容赋予真实的 3D 景深、厚度和动态透视效果。
它内置了多种交互模型,能够根据光标位置、设备倾角或预设动画自动计算 3D 变换,非常适合构建 Sci-Fi 风格的大屏卡片、炫酷的导航入口或数据看板。
Tui3DPanel 是组件库中7个高级组件之一,需要取得授权后使用。基础用法
最简单的用法是将其作为容器包裹业务内容。默认情况下(mode="auto"),它会在 PC 端启用矩阵模式,在移动端启用陀螺仪模式。
<template>
<Tui3DPanel>
<div class="card-content">
我是具有厚度和光影的 3D 卡片
</div>
</Tui3DPanel>
</template>全局开关
您可以通过全局配置项 t3D 快速开启或关闭所有 3D 面板的变形效果。 当设置为 false 时,组件将退化为普通的平面容器,不再消耗计算资源,这在性能受限的设备上非常有用。
// 全局配置 (通常在 main.js 或 setup 中)
const globalConfig = {
// ...其他配置
t3D: true // 开启/关闭全局 3D 变形
}模式详解
mode 属性是组件的核心,决定了 3D 交互的行为逻辑。
矩阵模式 (matrix)
PC端默认模式。 所有面板作为一个整体矩阵,根据光标相对于屏幕中心的位置进行统一变形。
- 特点: 屏幕上所有
T3DPanel的倾斜角度完全一致。光标在屏幕左上角时,所有面板统一向左上倾斜。 - 适用: 规则排列的卡片墙、数据列表。
蜂巢模式 (hive)
独立注视交互。 每个面板独立计算光标与自身的相对位置,呈现出“向日葵”般的注视效果。
- 特点: 距离光标越远的面板,透视变形越明显;面板始终朝向光标。
- 适用: 散列布局、强调个体交互的场景。
联合模式 (unity)
整体容器变形。 将 <Tui3DPanel> 视为一个巨大的 3D 容器,内部的所有子元素(通过 Slot 传入)共享同一个透视平面,但子元素的阴影会根据各自位置实时独立计算,以保证真实感。
- 特点: 适合包裹整个大屏区块或复杂的组合组件。
悬停模式 (hover)
鼠标交互触发。 仅在鼠标悬停(Hover)时触发 3D 变形。支持从 initialRotate(初始角度)平滑过渡到 hoverRotate(目标角度)。
- 适用: 导航按钮、关键数据卡片。
动画模式
自动循环播放。 根据传入的 animationRotate 关键帧数组,自动循环播放 3D 摇摆动画。
- 配置: 需配合
duration(周期) 和aniDelay(延迟) 使用。
陀螺仪模式 (gyro)
移动端专属。 调用移动设备的陀螺仪(重力感应)数据,根据手机的物理倾斜角度实时控制面板的 3D 姿态。
- 要求: 必须在 HTTPS 环境下才能调用设备传感器 API。
静态模式 (static)
固定展示。 不响应任何交互,始终保持 initialRotate 设定的固定角度。
自适应模式 (auto)
智能切换 (默认)。
- PC 端: 自动切换为
matrix模式。 - 移动端: 自动切换为
gyro模式。
视觉与物理配置
阴影系统 (Shadow)
组件会自动计算模拟真实光源的阴影。
showShadow: 是否显示阴影。shadowCoeff: 阴影位移系数。值越大,阴影偏离主体越远,浮空感越强。shadowBlur: 阴影模糊半径。
厚度系统 (Thickness)
组件通过层叠算法模拟物体的物理厚度。
showThickness: 是否显示厚度。thicknessLength: 厚度的物理像素长度。thicknessColor: 厚度层的颜色。默认自动获取主题色。thicknessFixGap: 是否开启厚度缝隙修正(用于解决某些浏览器渲染时的微小裂缝)。
插槽作用域
T3DPanel 通过作用域插槽向内部默认暴露了一组特殊的动态阴影类名。
这些类名并非静态样式,而是会根据当前的 3D 变形角度、光源方向实时计算偏移量和模糊度。将它们绑定到内部的业务元素上,可以实现阴影与 3D 姿态的实时联动,从而极大地增强立体感和真实感。
| 属性名 | 默认值 | 说明 |
|---|---|---|
| boxShadowName | 'box-shadow-item' | 盒阴影联动。用于容器的 box-shadow,随面板倾斜改变阴影投射方向。 |
| textShadowName | 'text-shadow-item' | 文字阴影联动。用于内部文本的 text-shadow,增强文字浮空感。 |
| t3dShadowName | 't3d-shadow-item' | 3D 专用阴影。用于配合厚度系统或更复杂的 3D 场景模拟。 |
| dropShadowName | 'drop-shadow-item' | 滤镜投影联动。用于透明 PNG 图片或 SVG 图标的 filter: drop-shadow,确保投影形状准确。 |
使用示例
<Tui3DPanel>
<template #default="{ boxShadowName, textShadowName, dropShadowName }">
<div class="my-card" :class="boxShadowName">
<h3 :class="textShadowName">3D Data Visualization</h3>
<img src="icon.png" :class="dropShadowName" />
</div>
</template>
</Tui3DPanel>API 参考
Props
核心配置
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| mode | String | 'auto' | 核心。可选值:'auto', 'matrix', 'hive', 'unity', 'hover', 'animation', 'gyro', 'static'。 |
| coeff | Number | null | 全局变形系数。控制 3D 旋转的敏感度,值越大旋转幅度越大。 |
| perspective | Number | - | CSS 视距。决定 3D 透视的强弱。 |
| transformOrigin | String | null | 变形原点。如 'left top', 'center'。支持标准 CSS 语法。 |
| view3d | Boolean | true | 当前组件是否参与 3D 渲染。 |
交互与动画
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| initialRotate | Object | {x:0,y:0,z:0} | 初始旋转角度 (Static/Hover 模式起始态)。 |
| hoverRotate | Object | {x:0,y:0,z:0} | 悬停目标旋转角度 (Hover 模式)。 |
| rotateMax | Number | 50 | 最大旋转角度限制 (Matrix/Hive 模式)。 |
| rotateMin | Number | -50 | 最小旋转角度限制 (Matrix/Hive 模式)。 |
| animationRotate | Array | [] | 动画关键帧数组 [{x,y}, {x,y}...] (Animation 模式)。 |
| duration | Number | null | 动画单次循环时长 (ms)。 |
| aniDelay | Number | 1000 | 动画启动延迟 (ms)。 |
| hoverDelay | Number | 0 | 悬停触发延迟 (ms)。 |
| hoverMask | Boolean | false | 悬停时是否显示高亮遮罩。 |
移动端陀螺仪
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| uesAlpha | Boolean | false | 是否使用 Alpha (罗盘方向) 数据参与旋转。 |
| fixAlpha | Number | 0 | Alpha 角度修正值。 |
视觉效果 (阴影/厚度)
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| showShadow | Boolean | true | 是否显示动态阴影。 |
| shadowCoeff | Number | - | 阴影位移系数。 |
| shadowBlur | Number | - | 阴影模糊度。 |
| shadowTransparent | Number | - | 阴影透明度。 |
| showThickness | Boolean | true | 是否显示 3D 厚度。 |
| thicknessLength | Number | - | 厚度深度 (px)。 |
| thicknessCoeff | Number | - | 厚度层叠系数。 |
| thicknessColor | String | null | 厚度侧边颜色。 |
| thicknessFixGap | Boolean | false | 开启厚度渲染缝隙修正。 |
其他
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| eventBus | Boolean | false | 是否开启事件总线。用于 Unity/Gyro 模式下的多组件状态同步。 |
| index | Number | 0 | 列表渲染时的索引 (用于计算交错动画)。 |
| group | String | 't3dcom' | 组件分组名称。 |