移动端图片缩放时页面还在滚动,怎么处理手势冲突?
在开发移动端图片缩放功能时遇到个怪问题,用户双指缩放图片的时候,页面本身还在跟着滚动,导致体验特别差。
我用transform: scale()实现缩放,监听了touchstart和touchmove事件,代码大致这样写的:
<div class="image-container"
ontouchstart="handleTouchStart(event)"
ontouchmove="handleTouchMove(event)">
<img src="photo.jpg" class="zoomable">
</div>
我尝试给容器加了touch-action: none;和overflow: hidden,也用了event.preventDefault(),但快速缩放时页面还是偶尔会滚动。有什么可靠的解决办法吗?
touchmove事件里加上event.cancelable && event.preventDefault(),确保只在可取消的情况下调用。另外,给容器加个overscroll-behavior: none;就能彻底干掉页面滚动的干扰。代码可以这么写:
记得在样式里加上这个:
handleTouchMove里加个判断,确保只在缩放时调用event.preventDefault(),别无脑阻止默认行为。代码这样改:
再把容器的
touch-action设成pinch-zoom,系统会处理剩下的问题。就这样。