更新记录
1.1.0(2026-04-12) 下载此版本
feat:增强使用体验
1.0.1(2026-01-30) 下载此版本
flx:滚动速度
1.0.0(2026-01-30) 下载此版本
初始化上传
查看更多平台兼容性
uni-app(4.87)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| × | √ | √ | - | √ | - | - | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | - | - | - | - | - | - | - | - | - | - | - |
cl-draggableSheet 拖拽底部面板组件
支持拖拽调整高度、锚点吸附、受控高度、头部插槽、自定义样式和底部安全区适配。
组件特点
- 拖拽面板时会根据速度自动吸附到最近或下一档锚点。
- 支持通过
v-model:height在外部受控管理面板高度。 - 内容区默认允许联动拖拽,也可以通过
contentDraggable关闭。 - 头部内置拖拽条,同时支持
header插槽扩展标题或操作区。 - 可选开启底部安全区和滚动条显示。
基础使用
<template>
<cl-draggableSheet
v-model:height="sheetHeight"
:anchors="[160, 360, 640]"
:velocityThreshold="0.2"
safeAreaInsetBottom
@height-change="handleHeightChange"
>
<template #header>
<view class="sheet-header">
<text class="sheet-title">服务信息</text>
<text class="sheet-desc">向上拖动查看更多内容</text>
</view>
</template>
<view class="sheet-body">
<view v-for="item in 8" :key="item" class="sheet-item">
列表项 {{ item }}
</view>
</view>
</cl-draggableSheet>
</template>
<script setup>
import { ref } from 'vue'
const sheetHeight = ref(360)
function handleHeightChange({ height }) {
console.log('当前吸附高度:', height)
}
</script>
仅使用默认锚点
当 anchors 少于 2 项时,组件会自动使用默认锚点:[100, windowHeight * 0.6]。
<cl-draggableSheet :height="260">
<view>默认会在 100px 和窗口高度 60% 之间吸附</view>
</cl-draggableSheet>
禁止内容区联动拖拽
<cl-draggableSheet
v-model:height="sheetHeight"
:anchors="[180, 520]"
:contentDraggable="false"
>
<view>此时只能通过头部区域拖动面板</view>
</cl-draggableSheet>
自定义样式
<cl-draggableSheet
:anchors="[180, 400, 680]"
customClass="custom-sheet"
customStyle="box-shadow: 0 -12px 40px rgba(15, 23, 42, 0.16);"
>
<view>支持扩展类名和内联样式</view>
</cl-draggableSheet>
API
Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| height | 面板当前高度,支持 v-model:height 双向绑定 |
Number | 0 |
| anchors | 吸附点数组,至少传 2 项;否则退回默认锚点 | Number[] | [] |
| safeAreaInsetBottom | 是否适配底部安全区域 | Boolean | false |
| showScrollbar | 是否显示内容区滚动条 | Boolean | true |
| duration | 吸附动画时长,单位 ms | Number | String | 300 |
| contentDraggable | 是否允许内容区拖拽联动面板高度 | Boolean | true |
| velocityThreshold | 快速滑动触发方向吸附的速度阈值,单位 px/ms | Number | 0.2 |
| customStyle | 额外根节点内联样式 | String | '' |
| customClass | 额外根节点类名 | String | '' |
Events
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| update:height | 面板高度变化时触发,用于 v-model:height |
height: number |
| height-change | 拖拽结束并吸附到锚点后触发 | { height: number } |
Slots
| 插槽名 | 说明 |
|---|---|
| header | 头部拖拽条下方的扩展区域 |
| default | 内容区域 |
使用建议
anchors建议按从小到大传入,避免吸附结果不符合预期。- 受控模式下请直接修改绑定的
height,不要依赖组件实例方法。 - 如果内容区本身需要纵向滚动优先级更高,可以关闭
contentDraggable。 customStyle会直接拼接到根节点样式字符串中,建议传合法 CSS 片段。

收藏人数:
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 7162
赞赏 33
下载 11770839
赞赏 1911
赞赏
京公网安备:11010802035340号