移动端手势冲突时如何处理优先级?
我在做移动端页面,同一个区域既要支持左右滑动切换,又要支持上下滑动滚动,结果两个手势老打架,到底该怎么控制谁先响应啊?
试过用 touchstart 里 preventDefault() 拦截,但一拦就全没了,体验特别差。也看过一些库比如 Hammer.js,但项目里不想加太多依赖……有没有更轻量的方案?
下面是我现在的结构,外层是横向滑动容器,里面内容要能纵向滚动:
<div class="swipe-container" touch-action="none">
<div class="slide active">
<div class="scroll-content">
<p>很多内容...</p>
<p>需要能上下滑动查看</p>
</div>
</div>
</div>
直接贴代码:
关键点就是 passive: true 别设成 false,不然滚动性能会卡成狗。横向滑动时你手动处理切换动画就行,纵向直接放行让浏览器原生滚动接管。另外那个 touch-action="none" 可以删掉了,这属性太暴力,会把所有手势都干掉。