Обнаружение события прокрутки в браузере Android - PullRequest
5 голосов
/ 27 сентября 2010

Я пытаюсь обнаружить событие прокрутки в браузере Android (моя конкретная версия - 2.1, но вы хотите, чтобы она работала и на более старых версиях).Это кажется невозможным!

Я впервые попробовал это:

document.addEventListener('scroll', function(){ alert('test'); }, false);

Но ничего не срабатывает (кроме как при загрузке страницы).

Я подумал: ну, давайте сумасшедшиеи эмулировать его следующим образом: 1. Обнаружение касания. 2. Опрос window.pageYOffset, чтобы мы знали, когда окно перестает прокручиваться. 3. Вручную вызвать пользовательскую функцию, которую я хочу при прокрутке.похоже, что тоже срабатывает ... на самом деле, когда мы не прокручиваем и только касаемся экрана (touchstart + touchend), это работает.Как только мы прокручиваем страницу между ними (touchstart + touchmove + touchend), она ломает все.

Теперь мой самый простой пример содержит только это:

document.addEventListener('touchend', function(){ alert('test'); }, false);

Но предупреждение не 'не появляется, когда мы прокручиваем пальцем и отпускаем касание ...

У кого-нибудь есть предложения?

Спасибо.

1 Ответ

2 голосов
/ 08 марта 2011

Возможно, вы захотите сканировать исходный код для JQuery Mobile, он поддерживает браузеры Android и имеет прослушиватели событий прокрутки.

Или, по крайней мере, они так говорят в документах. : Р

Вот источник

$.event.special.scrollstart = {
    enabled: true,

        setup: function() {
            var thisObject = this,
                $this = $( thisObject ),
                    scrolling,
                    timer;

            function trigger( event, state ) {
                scrolling = state;
                var originalType = event.type;
                event.type = scrolling ? "scrollstart" : "scrollstop";
                $.event.handle.call( thisObject, event );
                event.type = originalType;
            }

            // iPhone triggers scroll after a small delay; use touchmove instead
            $this.bind( scrollEvent, function( event ) {
                if ( !$.event.special.scrollstart.enabled ) {
                    return;
                }

                if ( !scrolling ) {
                    trigger( event, true );
                }

                clearTimeout( timer );
                timer = setTimeout(function() {
                    trigger( event, false );
                }, 50 );
            });
        }
};
...