shop-web/doc/vant-docs/floating-panel.md

146 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FloatingPanel 浮动面板
### 介绍
浮动在页面底部的面板,可以上下拖动来浏览内容,常用于提供额外的功能或信息。请升级 `vant` 到 >= 4.5.0 版本来使用该组件。
### 引入
通过以下方式来全局注册组件,更多注册方式请参考[组件注册](#/zh-CN/advanced-usage#zu-jian-zhu-ce)。
```js
import { createApp } from 'vue';
import { FloatingPanel } from 'vant';
const app = createApp();
app.use(FloatingPanel);
```
## 代码演示
### 基础用法
FloatingPanel 的默认高度为 `100px`,用户可以拖动来展开面板,使高度达到 `60%` 的屏幕高度。
```html
<van-floating-panel>
<van-cell-group>
<van-cell
v-for="i in 26"
:key="i"
:title="String.fromCharCode(i + 64)"
size="large"
/>
</van-cell-group>
</van-floating-panel>
```
### 自定义锚点
你可以通过 `anchors` 属性来设置 FloatingPanel 的锚点位置,并通过 `v-model:height` 来控制当前面板的显示高度。
比如,使面板的高度在 `100px`、40% 屏幕高度和 70% 屏幕高度三个位置停靠:
```html
<van-floating-panel v-model:height="height" :anchors="anchors">
<div style="text-align: center; padding: 15px">
<p>面板显示高度 {{ height.toFixed(0) }} px</p>
</div>
</van-floating-panel>
```
```js
import { ref } from 'vue';
export default {
setup() {
const anchors = [
100,
Math.round(0.4 * window.innerHeight),
Math.round(0.7 * window.innerHeight),
];
const height = ref(anchors[0]);
return { anchors, height };
},
};
```
### 仅头部拖拽
默认情况下FloatingPanel 的头部区域和内容区域都可以被拖拽,你可以通过 `content-draggable` 属性来禁用内容区域的拖拽。
```html
<van-floating-panel :content-draggable="false">
<div style="text-align: center; padding: 15px">
<p>内容不可拖拽</p>
</div>
</van-floating-panel>
```
### 禁用磁力吸附
默认情况下,拖拽结束后面板会自动吸附到最近的锚点。你可以通过 `magnetic` 属性来禁用这种磁力吸附行为。
`magnetic` 设置为 `false` 时,面板在拖拽结束后不会自动吸附到锚点,但仍然会被约束在锚点定义的最小和最大边界范围内。
```html
<van-floating-panel :anchors="[100, 200, 300]" :magnetic="false">
<div style="text-align: center; padding: 15px">
<p>已禁用磁力吸附</p>
<p>面板可在边界范围内任意位置停留</p>
</div>
</van-floating-panel>
```
## API
### Props
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| v-model:height | 当前面板的显示高度 | _number \| string_ | `0` |
| anchors | 设置自定义锚点, 单位 `px` | _number[]_ | `[100, window.innerHeight * 0.6]` |
| duration | 动画时长,单位秒,设置为 0 可以禁用动画 | _number \| string_ | `0.3` |
| magnetic | 是否启用磁力吸附到锚点。禁用后面板可在锚点边界范围内任意位置停留 | _boolean_ | `true` |
| content-draggable | 允许拖拽内容容器 | _boolean_ | `true` |
| lock-scroll `v4.6.4` | 当不拖拽时,是否锁定背景滚动 | _boolean_ | `false` |
| safe-area-inset-bottom | 是否开启[底部安全区适配](#/zh-CN/advanced-usage#di-bu-an-quan-qu-gua-pei) | _boolean_ | `true` |
### Events
| 事件名 | 说明 | 回调参数 |
| ------------- | -------------------------------- | -------------------- |
| height-change | 面板显示高度改变且结束拖动后触发 | _{ height: number }_ |
### Slots
| Name | Description |
| ------- | -------------- |
| default | 自定义面板内容 |
| header | 自定义面板标头 |
### 类型定义
组件导出以下类型定义:
```ts
import type { FloatingPanelProps } from 'vant';
```
## 主题定制
### 样式变量
组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider 组件](#/zh-CN/config-provider)。
| Name | Default Value | Description |
| ---------------------------------- | ------------------------- | ----------- |
| --van-floating-panel-border-radius | _16px_ | - |
| --van-floating-panel-header-height | _30px_ | - |
| --van-floating-panel-z-index | _999_ | - |
| --van-floating-panel-background | _var(--van-background-2)_ | - |
| --van-floating-panel-bar-width | _20px_ | - |
| --van-floating-panel-bar-height | _3px_ | - |
| --van-floating-panel-bar-color | _var(--van-gray-5)_ | - |