swipe-action 在真机上点不动是因为微信小程序不支持其原生能力,且常因 touch 事件被拦截、与 scroll-view 手势冲突或未开启 App 编译选项导致失效;推荐用 scroll-view + 手动 touch 逻辑实现更稳定可控的左滑收藏。
swipe-action 在真机上点不动,不是你代码写错了,是它根本没生效——尤其在微信开发者工具里,压根不支持;真机调试也常因 touch 事件被拦截而失效。swipe-action 在列表里点不动?常见错误现象:swipe-action 点击无响应、滑动卡顿、菜单弹不出、iOS 下直接触发页面滚动
catchtouchmove 或 preventDefault(),把 touch 事件吞掉了scroll-view 里——scroll-view 和 swipe-action 的原生手势冲突,App 端会优先处理滚动swipe-action 原生能力,只在 App 和 H5(部分平台)可用scroll-view + 手动 touch 逻辑实现左滑收藏比依赖 swipe-action 更稳,且能精确控制收藏图标切换、回弹阻尼、阈值和动画时长
touchstart 记录起始 clientX
touchmove 中计算偏移量,用 transform: translateX() 驱动位移(别用 left,重排版性能差)touchmove 里加 e.preventDefault(),否则 iOS 会连带触发页面滚动touchend 判断位移是否超过阈值(比如 120),决定是回弹还是固定展开收藏菜单v-model 或响应式 isFavorited 控制图标颜色和文案scroll-view
uni-list 默认就是页面级滚动,适合长列表;而 scroll-view 是自定义滚动容器,会劫持 touch 事件
<uni-list><uni-list-item>,不要包一层 <scroll-view scroll-y="true">
scroll-x="true" 的 scroll-view 是安全的——它和列表项滑动方向正交,不冲突uni-list(nvue 下自动走原生 list),它会在滚动出屏后回收节点,避免内存堆积滑动过程中快速点按容易误触发收藏,需要加防抖和状态锁定
isSliding = true,在 touchend 后延时 150ms 再恢复<uni-icons>,通过 :type="isFavorited ? 'heart-filled' : 'heart' 切换component2 编译模式,否则 uni-icons 可能不渲染