iOS 上从屏幕左边缘 20px 右滑,本意是翻轮播图,结果触发了系统返回上一页,活动页直接退出。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,系统边缘返回手势优先于页面内 touch 事件,起点落在边缘区域时不会交给 JS。轮播的触摸区没有避开这一段。
「iOS 边缘手势」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
.carousel { touch-action: pan-y; margin-left: 24px; }
// 或监听 touchstart
if (e.touches[0].clientX < 20) return;
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
具体做法是,轮播的触摸区从距左边 24px 开始;需要整屏滑动时禁用页面级横向手势;给轮播加 touch-action 的 pan-y 只允许纵向;真机从边缘和中间各滑一次对比。
最后用这个标准收尾,从左边缘右滑退出页面,从轮播区域右滑只切换图片,两个行为不再冲突。
