我正在尝试修复一个仅在 iOS13 上出现的带有水平滚动图片库的错误。我们使用的是 Hammer.js,用户可以正确地向左滑动(以获取下一张图片),但他们不能可靠地向右滑动(以获取上一张图片)。正如我所说,这是 Safari 和 Chrome 上的 iOS 13。
我设置了日志来检查平移事件,这就是发生的事情。
如果您将手指向左拖动,则 deltaX(x 轴上的距离)表现得恰到好处 - 距离类似于-11, -22, -41, -58, -68, -84
, -101, -114, -124
,然后我们点击下一个滑动函数。
但是,如果您将手指向右拖动,则 delta-X 会变成21, 27, 42, 67, 88, 102, 124, 138, 142
, -61
。最后一个 -61 不会触发上一个滑动功能,因为它太小(如果您的平移大于屏幕宽度的 1/4,我们只会触发上一个或下一个)而且它的方向错误,所以偶尔滑动到上一个会触发下一张幻灯片!
我不知道那个随机的最后一个数字是从哪里来的。它通常小于 100,可以是正数或负数。它只发生在向右平移时。偶尔(10 次中的 1 次)我们没有得到最后一个不稳定的数字并且向右滑动有效,但这种情况很少见,而且似乎与速度或距离无关。
代码超级简单:
mc.on('panstart', function(e) {
//overlay stuff
});
mc.on('pan', function(e) {
//debounced overlay stuff for prefetching the next slide
});
mc.on('panend pancancel', function(e) {
if (Math.abs(e.deltaX) > gallery.width / 4) {
if (e.deltaX < 0) {
next();
} else {
prev();
}
} else {
//do nothing
}
});