2013-09-12 2 views
41

Возрастная проблема: Получение события прокрутки для запуска, когда пользователь прокручивает элемент, находясь на мобильном сайте или приложении (веб-представление).jQuery live scroll event on mobile (work around)

Все, что я ищу - это доступ к правильному значению scrollTop(), когда пользователь прокручивает мою страницу на мобильном устройстве, а не получает ее, когда пользователь останавливается.

Я уверен, что где-то есть обходной путь, если я прав, это ограничение установлено iOS, и в течение последних нескольких лет обсуждалось это.

Я пробовал внедрять собственные эмуляторы прокрутки, но ни один из них, похоже, не работает, как я хочу, и, честно говоря, кажется, что излишним, если все, что я действительно хочу, является постоянным scrollTop() во время прокрутки пользователя.

Я сейчас думаю о том, чтобы начать счетчик на touchStart и остановить его на touchStop, но что-то говорит мне, что я трачу свое время.

Любые помощь ребята?

ответ

81

С JQuery:

$('body').bind('touchmove', function(e) { 
    console.log($(this).scrollTop()); // Replace this with your code. 
}); 

Это должно дать вам последовательный поток значения scrollTop, когда пользователь прокручивает, но будьте осторожны, так как это будет стрелять даже тогда, когда пользователь просто держит свой палец на экране ,

Обратите внимание, что если вы используете JQuery> = 1.7 предпочтительного связывания метод является .on() вместо метода .bind() я использовал в моем примере. В этом случае мой пример будет

$('body').on({ 
    'touchmove': function(e) { 
     console.log($(this).scrollTop()); // Replace this with your code. 
    } 
}); 

Источник: https://github.com/dantipa/pull-to-refresh-js/blob/master/jquery.plugin.pullToRefresh.js

+0

Это выглядит многообещающим, я проверю его на своем приложении, а затем примите ответ, если он будет работать. Это должно, по сути, технически вы ответили на вопрос и демонстрационные работы. Хорошо, я принимаю это сейчас. –

+3

Не уверен, что я делаю неправильно, но это решение работает еще менее хорошо для меня, чем событие прокрутки ... – amosmos

+0

похоже, что это работает при использовании панели инструментов Chrome (и прокрутка, щелкая мышью и перетаскивая), но на самом деле не работает мобильные устройства. – Acidic

4

может быть, вы могли бы взглянуть на то, как iScroll делает это в их _move -методе, который связан с touchmove события: https://github.com/cubiq/iscroll/blob/master/src/core.js#L152

Это немного сложнее, но я уверен, вы поймете это. Вы также можете просто использовать iScroll для начала и привязать к их событию scrollmove (я не уверен, как он называется iScroll 5, но он был onScrollMove в iScroll 4). that.y затем даст вам правильное значение.