Я смог получить отличное решение этой проблемы с помощью iScroll, с ощущением динамической прокрутки и всем остальным https://github.com/cubiq/iscroll Документ github великолепен, и я в основном следил за ним. Вот подробности моей реализации.
HTML:
я обернул прокручиваемую область моего контента в некоторые div, которые может использовать iScroll:
<div id="wrapper">
<div id="scroller">
... my scrollable content
</div>
</div>
CSS:
я использовал класс Modernizr для «прикосновения», чтобы нацелить изменения моего стиля только на сенсорные устройства (потому что я создавал экземпляр iScroll только при касании).
.touch #wrapper {
position: absolute;
z-index: 1;
top: 0;
bottom: 0;
left: 0;
right: 0;
overflow: hidden;
}
.touch #scroller {
position: absolute;
z-index: 1;
width: 100%;
}
JS:
Я включил iscroll-probe.js из загрузки iScroll, а затем инициализировал скроллер, как показано ниже, где updatePosition - моя функция, которая реагирует на новую позицию прокрутки.
# coffeescript
if Modernizr.touch
myScroller = new IScroll('#wrapper', probeType: 3)
myScroller.on 'scroll', updatePosition
myScroller.on 'scrollEnd', updatePosition
Теперь вам нужно использовать myScroller, чтобы получить текущую позицию, вместо того, чтобы смотреть на смещение прокрутки. Вот функция, взятая из http://markdalgleish.com/presentations/embracingtouch/ (очень полезная статья, но сейчас она немного устарела)
function getScroll(elem, iscroll) {
var x, y;
if (Modernizr.touch && iscroll) {
x = iscroll.x * -1;
y = iscroll.y * -1;
} else {
x = elem.scrollTop;
y = elem.scrollLeft;
}
return {x: x, y: y};
}
Единственная другая проблема заключалась в том, что иногда я терял часть своей страницы, на которую я пытался прокрутить, и она отказывалось прокручиваться. Мне приходилось добавлять несколько вызовов myScroller.refresh () всякий раз, когда я менял содержимое #wrapper, и это решало проблему.
РЕДАКТИРОВАТЬ: Еще одна проблема заключалась в том, что iScroll съедает все события щелчка. Я включил опцию, чтобы iScroll генерировал событие «касание» и обрабатывал его вместо событий «щелчок». К счастью, мне не нужно было много щелкать в области прокрутки, так что это не имело большого значения.
window.pageYOffset
и неdocument.body.scrollTop||document.documentElement.scrollTop
как и любой другой браузер / аппаратных средств в существовании.