iScroll - сохранение встроенной вертикальной прокрутки - работает в iOS, а не в Android - PullRequest
7 голосов
/ 28 октября 2011

Я использую 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 только первый набор координат перехватывается. Любая идея, почему это будет?

Ответы [ 2 ]

0 голосов
/ 26 января 2013

Создатель iScroll на самом деле имеет порт, который, кажется, работает именно так, как вы описали, с горизонтальной прокруткой и возможностью вертикальной прокрутки. https://github.com/cubiq/2-way-iScroll

0 голосов
/ 13 февраля 2012

Похоже, у вас нет "точки" в вашей области действия для onBeforeScrollMove.Кроме того, некоторые устройства Android могут вызывать события клика через мультитач (я не могу подтвердить это, но только теоретизирую из-за фрагментации платформы)

У меня есть хороший скрипт, который я скоро опубликую, который принимает события клика иИмитирует уникальное мультитач-событие, используя «мышь» в качестве свойства идентификатора касания, что может помочь при отладке.Я попытаюсь запустить проект в режиме онлайн к завтрашнему вечеру.

Он должен быть добавлен в ряд обновлений и проектов, но вот ссылка:

https://github.com/skhameneh

РЕДАКТИРОВАТЬ: Исправление, вы даже обновляете "точку"?Кажется, что он выходит за пределы этого фрагмента кода и изменяется внутри.Может быть полезно, если вы разместили оставшуюся часть кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...