HarmonyOS Next-半模态框bindSheet
·
bindSheet
给组件绑定半模态页面,点击后显示模态页面。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| isShow | Optional<boolean> | 是 |
是否显示半模态页面。 从API version 10开始,该参数支持$$双向绑定变量。 |
| builder | CustomBuilder | 是 | 配置半模态页面内容。 |
| options | SheetOptions | 否 | 配置半模态页面的可选属性。 |
注意:
-
在非双向绑定情况下,以拖拽方式关闭半模态页面不会改变isShow参数的值。
-
为了使isShow参数值与半模态界面的状态同步,建议使用$$双向绑定isShow参数。
-
在半模态单挡位向上拖拽或是多挡位上滑换挡情况下,内容在拖拽结束或换挡结束后更新显示区域。
-
半模态是一个严格和宿主节点绑定在一起的弹窗。若是想实现类似“页面显示的瞬间就弹出半模态”的效果,请确认宿主节点是否已挂载上树。若宿主节点还没上树就将isShow置为true,半模态将不生效。建议使用onAppear函数,确保在宿主节点挂载后再显示半模态。
尤其是 SheetMode = EMBEDDED 时,除宿主节点外,还需确保对应的页面节点成功挂载。
-
半模态页面的离场动效不支持打断,动效执行期间无法响应其他手势动作。目前离场动效使用弹簧曲线,该动画曲线存在视觉上并不明显的拖尾动画。因此,在半模态退出时,视觉上半模态页面已经消失,但此时动效可能还未结束,若想再次点击拉起半模态页面则不会响应。需要等动效完全结束后,才可以再次拉起。
小案例:
代码:
@Entry
@Component
struct BindSheetExample {
@State isShowSheet: boolean = false; // 控制抽屉显示状态
@State sheetHeight: number = 300; // 动态高度控制
// 构建抽屉内容
@Builder
sheetContent() {
Column() {
// 顶部操作栏
Row() {
Text('设置')
.fontSize(20)
.fontColor(Color.Black)
.margin({ left: 15 })
Blank()
Image($r('app.media.mv17'))
.width(24)
.height(24)
.margin({ right: 15 })
.onClick(() => {
this.isShowSheet = false; // 点击关闭图标
})
}
.width('100%')
.padding(10)
Divider().color(0xeeeeee)
// 菜单项列表
Column() {
Text('个人资料').fontSize(18).margin(10)
.onClick(() => { /* 处理点击事件 */ })
Text('账号安全').fontSize(18).margin(10)
Text('通知设置').fontSize(18).margin(10)
Text('关于我们').fontSize(18).margin(10)
}
.width('100%')
.alignItems(HorizontalAlign.Start)
}
.backgroundColor(Color.White)
}
build() {
Column() {
Button('打开设置面板')
.fontSize(20)
.width(200)
.height(50)
.backgroundColor('#409EFF')
.onClick(() => {
this.isShowSheet = true; // 点击触发显示
this.sheetHeight = 300;
})
.margin({ top: 50 })
}
.width('100%')
.height('100%')
.bindSheet(
$$this.isShowSheet,
this.sheetContent(),
{
height: this.sheetHeight,
backgroundColor: Color.White,
showClose: false, // 自定义关闭按钮
dragBar: true, // 显示拖拽条
onDisappear: () => { // 关闭完成回调
console.log('抽屉已完全关闭');
}
}
)
}
}
效果:

更多推荐

所有评论(0)