Я использую iScroll.js для прокрутки карусели элементов на странице мобильного устройства. Я обнаружил следующее исправление, которое прослушивает вертикальное перемещение и останавливает управление сценарием iScroll, позволяя осуществить собственную вертикальную прокрутку:
onBeforeScrollStart: function(e) {
try {
point = e.touches[0];
pointStartX = point.pageX;
pointStartY = point.pageY;
} catch(e) {}
null;
},
onBeforeScrollMove: function(e) {
try {
deltaX = Math.abs(point.pageX - pointStartX);
deltaY = Math.abs(point.pageY - pointStartY);
if (deltaX >= deltaY) {
e.preventDefault();
} else {
null;
}
} catch(e) {}
}
Я использую try {} catch {}, так как при тестировании в браузере возникали некоторые проблемы (жаловался на то, что точка не определена).
Проблема, с которой я столкнулся, заключается в том, что она хорошо работает на iOS, протестирована на нескольких i-устройствах, но на Android она не так хороша. Если пользователь пытается прокрутить страницу по вертикали, начав с того, что положит палец на карусель, страница не будет прокручиваться, поскольку iScroll все еще имеет контроль.
Есть идеи, как заставить его работать на Android, или какие-нибудь указатели на то, где это может пойти не так?
Edit:
Некоторая отладка, и я, возможно, обнаружил, почему это не работает. Координаты обновляются, пока пользователь касается экрана на iOS, но на Android только первый набор координат перехватывается. Любая идея, почему это будет?