HarmonyOS 鸿蒙Next中半模态弹窗回弹问题

HarmonyOS 鸿蒙Next中半模态弹窗回弹问题 我绑定一个半模态后,设置了500半模态高度,当弹窗弹出后,可以上拉有一个回弹,如何取消这个效果

6 回复

【解决方案】

使用关闭回调函数,bindSheet注册onWillDismiss与onWillSpringBackWhenDismiss。若不注册onWillSpringBackWhenDismiss回调函数,但只注册shouldDimiss或onWillDismiss时,则默认在下拉关闭时,会触发回弹效果。

更多关于HarmonyOS 鸿蒙Next中半模态弹窗回弹问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


楼主方便提供一下效果动画吗,我这边理解的回弹只是关闭onWillSpringBackWhenDismiss,我感觉这个和楼主输的不太一样
下面是我的代码:

Button('模态弹窗').onClick((event: ClickEvent) => {
  this.isOpen = !this.isOpen
})
  .bindSheet($$this.isOpen, this.Title('asdas'), {
    height: 500,
    onWillDismiss: ((dismissSheetAction: DismissSheetAction) => {
      if (dismissSheetAction.reason == DismissReason.SLIDE_DOWN) {
        dismissSheetAction.dismiss(); //注册dismiss行为
      }
    }),

    onWillSpringBackWhenDismiss: ((SpringBackAction: SpringBackAction) => {
      //没有注册springBack,下拉半模态页面无回弹行为
      //SpringBackAction.springBack();
    }),
  })

图片

若在该回调中不调用SpringBackAction.springBack()方法,即可取消回弹效果

bindSheet({
  onWillSpringBackWhenDismiss: (SpringBackAction: SpringBackAction) => {
    // 不调用springBack方法即可取消回弹效果
  }
})

文档地址

https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-attributes-sheet-transition#sheetoptions

楼主可以注册 onWillSpringBackWhenDismiss 回调,在 SheetOptions 中声明这个回调函数,并在回调中不调用 springBack 方法,就可取消系统默认的回弹行为。如果楼主同时需要拦截关闭行为,需在 onWillDismiss 中明确调用 dismiss 方法。

示例

bindSheet({

  // 其他配置参数...

  onWillDismiss: (action: DismissSheetAction) => {

    action.dismiss(); // 调用这个方法关闭弹窗

  },

  onWillSpringBackWhenDismiss: (action: SpringBackAction) => {

    // 不调用 springBack() 方法即可取消回弹效果

  }

})

在HarmonyOS Next中,半模态弹窗回弹问题通常与手势交互或动画参数设置有关。请检查弹窗组件的bindContentCover属性配置,特别是onClick事件处理逻辑。确保动态设置isShow状态时未在关闭动画结束前重复触发显示。可尝试在ArkTS中调整transition动画的curve曲线参数,或检查gesture相关事件是否冲突。

在半模态弹窗中取消回弹效果,可以通过设置 sheetModaldragBar 属性为 false 来实现。这样会隐藏拖拽条并禁用上拉回弹交互。

示例代码如下:

// 导入模块
import { BusinessError } from '[@ohos](/user/ohos).base';
import { sheetModal } from '[@kit](/user/kit).ArkUI';

// 定义半模态弹窗参数
let options: sheetModal.SheetOptions = {
  title: '标题',
  // 关键设置:禁用拖拽条
  dragBar: false,
  // 设置弹窗高度为500vp
  height: 500,
  // 设置弹窗圆角
  cornerRadius: 24,
  // 设置弹窗显示时是否显示半透明背景
  shouldDismissOnDragDown: true,
  // 设置弹窗显示时是否显示半透明背景
  showCloseIcon: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundColor: '#F1F3F5',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurStyle: sheetModal.BackgroundBlurStyle.THIN,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffect: sheetModal.BackgroundBlurEffect.LIGHT,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectStyle: sheetModal.BackgroundBlurEffectStyle.REGULAR,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurStyle: sheetModal.BackgroundBlurStyle.THIN,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffect: sheetModal.BackgroundBlurEffect.LIGHT,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectStyle: sheetModal.BackgroundBlurEffectStyle.REGULAR,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurStyle: sheetModal.BackgroundBlurStyle.THIN,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffect: sheetModal.BackgroundBlurEffect.LIGHT,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectStyle: sheetModal.BackgroundBlurEffectStyle.REGULAR,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurStyle: sheetModal.BackgroundBlurStyle.THIN,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffect: sheetModal.BackgroundBlurEffect.LIGHT,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectStyle: sheetModal.BackgroundBlurEffectStyle.REGULAR,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurStyle: sheetModal.BackgroundBlurStyle.THIN,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffect: sheetModal.BackgroundBlurEffect.LIGHT,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectStyle: sheetModal.BackgroundBlurEffectStyle.REGULAR,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurStyle: sheetModal.BackgroundBlurStyle.THIN,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffect: sheetModal.BackgroundBlurEffect.LIGHT,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectStyle: sheetModal.BackgroundBlurEffectStyle.REGULAR,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurStyle: sheetModal.BackgroundBlurStyle.THIN,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffect: sheetModal.BackgroundBlurEffect.LIGHT,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectStyle: sheetModal.BackgroundBlurEffectStyle.REGULAR,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurStyle: sheetModal.BackgroundBlurStyle.THIN,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffect: sheetModal.BackgroundBlurEffect.LIGHT,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectStyle: sheetModal.BackgroundBlurEffectStyle.REGULAR,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectEnabled: true,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectOpacity: 0.5,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectRadius: 10,
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectFilter: 'blur(10px)',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectColor: '#000000',
  // 设置弹窗显示时是否显示半透明背景
  backgroundBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBlurEffectBl
回到顶部