Skip to content

FloatingPanel 浮动面板

介绍

浮动在页面底部的面板,可以上下拖动来浏览内容,常用于提供额外的功能或信息。

引入

js
import { createApp } from 'vue';
import { FloatingPanel } from '@szhn/dh-design-mobile';

const app = createApp();
app.use(FloatingPanel);

代码演示

基础用法

FloatingPanel 的默认高度为 100px,用户可以拖动来展开面板,使其高度达到 60% 的屏幕高度。

html
<van-floating-panel>
  <van-cell v-for="i in 26" :key="i" :title="'选项 ' + i" size="large" />
</van-floating-panel>

自定义锚点

通过 anchors 属性来设置 FloatingPanel 的锚点位置,并通过 v-model:height 来控制当前面板的显示高度。

html
<van-floating-panel :anchors="anchors" v-model:height="height">
  <div style="padding: 16px; text-align: center;">自定义锚点面板</div>
</van-floating-panel>
js
const viewportHeight = typeof window === 'undefined' ? 800 : window.innerHeight
const anchors = [100, Math.round(0.4 * viewportHeight), Math.round(0.7 * viewportHeight)]

仅头部拖拽

默认情况下,FloatingPanel 的头部区域和内容区域都可以被拖拽,你可以通过 content-draggable 属性来禁用内容区域的拖拽。

html
<van-floating-panel :content-draggable="false">
  <van-cell v-for="i in 26" :key="i" :title="'选项 ' + i" size="large" />
</van-floating-panel>

禁用拖拽

你可以通过 draggable 属性来禁用面板的拖拽功能。当设置为 false 时,面板将不可拖拽,同时头部拖拽栏也会被隐藏。

html
<van-floating-panel :draggable="false">
  <van-cell v-for="i in 26" :key="i" :title="'选项 ' + i" size="large" />
</van-floating-panel>

API

Props

参数说明类型默认值
v-model:height当前面板的显示高度number | string0
anchors设置自定义锚点, 单位 pxnumber[][100, Math.round(0.6 * viewportHeight)]
duration动画时长,单位秒,设置为 0 可以禁用动画number | string0.3
magnetic是否启用磁力吸附到锚点。禁用后面板可在锚点边界范围内任意位置停留booleantrue
content-draggable允许拖拽内容容器booleantrue
draggable是否允许拖拽面板。禁用后头部拖拽栏会被隐藏booleantrue
lock-scroll当不拖拽时,是否锁定背景滚动booleanfalse
safe-area-inset-bottom是否开启底部安全区适配booleantrue

Events

事件名说明回调参数
height-change面板显示高度改变且结束拖动后触发{ height: number }

Slots

名称说明
default自定义面板内容
header自定义面板标头

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件。

名称默认值描述
--van-floating-panel-border-radius16px浮动面板的圆角大小
--van-floating-panel-header-height30px拖拽头部的高度
--van-floating-panel-z-index999浮动面板的层级
--van-floating-panel-backgroundvar(--van-background-2)浮动面板的背景色
--van-floating-panel-bar-width20px拖拽横条的宽度
--van-floating-panel-bar-height3px拖拽横条的高度
--van-floating-panel-bar-colorvar(--van-gray-5)拖拽横条的颜色