HarmonyOS 鸿蒙Next 如何在响应Swiper的滑动事件时不触发子组件的Down、up等事件,在不滑动时才响应子组件的Down、up等事件

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何在响应Swiper的滑动事件时不触发子组件的Down、up等事件,在不滑动时才响应子组件的Down、up等事件

Swiper() {
ForEach(this.operateList, (section: DeviceOperateSection) => {
Grid() {
this.FunctionGrid(section.items);
}
}, (item: DeviceOperateSection) => JSON.stringify(item))
}
.indicator(false)
.loop(false)
.width(“100%”)
.height(“100vp”)
.backgroundColor($r(‘app.color.whiteColor’))
.onChange((index) => {
this.index = index
})
@Builder
FunctionGrid(data: DeviceOperateItem[]) {
ForEach(data, (item: DeviceOperateItem) => {
GridItem() {
Column({space: “10vp”}) {
Image(this.currentOperateItemType === item.type ? item.selectImg : item.img)
.objectFit(ImageFit.Contain)
.height(“35vp”)
.width(“35vp”)
Text(item.title)
.fontSize(“12vp”)
.fontColor(this.currentOperateItemType === item.type ? $r(‘app.color.primaryColor’) :$r(‘app.color.blackColor’))
}
.alignItems(HorizontalAlign.Center)
.justifyContent(FlexAlign.Center)
.width(“100%”)
.height(“100%”)
.onTouch((event: TouchEvent) => {
if (event.type === TouchType.Down) {
this.currentOperateItemType = item.type
} else if (event.type === TouchType.Up) {
this.currentOperateItemType = DeviceFunctionType.all
}
})
}
.width(“25%”)
.height(“100%”)
}, (item: DeviceOperateItem): string => item.type.toString());
}

2 回复

可以监听下 Swiper 的滑动,去加个判断的标志位去处理。

其他的目前应该没什么好方法。

在HarmonyOS鸿蒙Next系统中,若想在响应Swiper组件的滑动事件时不触发其子组件的Down、Up等事件,而在不滑动时才正常响应这些事件,可以通过以下方式实现:

  1. 事件拦截机制:在Swiper组件的事件处理中,通过自定义事件拦截逻辑,判断当前操作是否为滑动。如果是滑动操作,则不向下传递事件到子组件,从而避免触发子组件的Down、Up等事件。

  2. 状态标记:在Swiper组件中维护一个滑动状态标记。在滑动开始时设置标记为true,滑动结束时设置为false。在子组件的事件处理中,先检查这个标记,如果为true则忽略Down、Up等事件。

  3. 事件消费:在Swiper的事件监听器中,通过消费滑动相关的事件(如onSwipeStart、onSwipeEnd等),确保这些事件不会继续传播到子组件,从而避免触发子组件的Down、Up事件。

通过上述方法,可以有效区分滑动操作与非滑动操作,实现对Swiper滑动事件与子组件Down、Up等事件的独立处理。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部