ArkUI ListItem侧滑菜单:搞懂start和end,单侧滑动不再难
2026/9/10 1:41:56 网站建设 项目流程

做列表需求的时候,最容易被产品一句话问住:“右滑删除就行,左滑别出来东西。”结果代码改完一跑,发现左右都能滑,甚至菜单还叠一起。别急着写一堆手势判断,ListItem 的“单侧滑动”这件事,九成都是startend没搞明白。

1. 为什么你的 ListItem 会“两边都能滑”?start 和 end 的真实含义

很多人在 ArkUI 里第一次给ListItem加侧滑菜单,都会经历这么一轮懵圈:打开文档一看,swipeAction里有两个字段,一个叫start,一个叫end。下意识就以为start是“向左滑”,end是“向右滑”。结果配完之后,发现四个方向的滑动行为完全不受控,产品过来看了一眼,说“这不是我要的单侧”。

这其实不是框架的问题,而是这两个字段的概念从一开始就理解反了。

1.1 start 不是“向左”,end 也不是“向右”——它们是左右两条边缘

在 ArkUI 里,ListItemswipeAction入参是这样一个对象:

swipeAction(value: { start?: CustomBuilder | SwipeActionItem, end?: CustomBuilder | SwipeActionItem })

这里的关键是startend指的是列表项组件自身的“起始边缘”和“结束边缘”,在默认的 LTR(从左到右)布局下:

  • start对应列表项的左边缘。配置了start,用户手指从左往右滑动时,左侧会拖出操作菜单。
  • end对应列表项的右边缘。配置了end,用户手指从右往左滑动时,右侧会拖出操作菜单。

所以“只能一侧滑动”这句话,放到 ArkUI 里翻译一下就是:你只需要配置startend其中的一个,另一个不写就行。

如果你两边的字段都写了,那左右两个方向当然都能滑出菜单。我见过不少新人的代码是这样的:

.swipeAction({ start: () => { this.buildStartMenu() }, end: () => { this.buildEndMenu() } })

你左滑右滑都有菜单,那不是框架抽风,是你自己在 config 里把两边都开了。

关于startend,我建议你直接记成“左边缘”和“右边缘”,千万别按英语语感去理解成“开始滑”“结束滑”。

1.2 只配一端,为什么另一边就真的“滑不动”了

可能有人会继续往下问:就算我只配了end,手指从左往右划的时候,列表项不是也会因为触摸而跟着动一下吗?

实测下来,在正常的List容器里,如果没有给start配置任何内容,从左往右滑动ListItem内容区域时,不会拖出任何菜单,也不会有持续的位移跟随。因为框架在开始处理侧滑手势时,会先判断当前方向有没有可展示的菜单,没有就直接不响应,整个手势相当于被丢弃了。

但有一个非常容易误导人的情况:如果你只配了end,手指在列表项上横向轻轻划一下,有时候视觉上还是会有非常轻微的“蹭”一下或者回弹感。这种感受通常来自两个地方:

  1. `

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询