Sono stato in grado di ottenere un'ottima soluzione a questo problema con iScroll, con la sensazione dello scorrimento dello slancio e tutto il resto https://github.com/cubiq/iscroll Il documento github è fantastico e l'ho seguito principalmente. Ecco i dettagli della mia implementazione.
HTML:
ho inserito l'area scorrevole dei miei contenuti in alcuni div che iScroll può utilizzare:
<div id="wrapper">
<div id="scroller">
... my scrollable content
</div>
</div>
CSS:
Ho usato la classe Modernizr per "touch" per indirizzare le mie modifiche di stile solo ai dispositivi touch (perché ho istanziato iScroll solo al tocco).
.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:
ho incluso iscroll-probe.js dal download iScroll, quindi ho inizializzato lo scroller come sotto, dove updatePosition è la mia funzione che reagisce alla nuova posizione di scroll.
# coffeescript
if Modernizr.touch
myScroller = new IScroll('#wrapper', probeType: 3)
myScroller.on 'scroll', updatePosition
myScroller.on 'scrollEnd', updatePosition
Devi usare myScroller per ottenere la posizione corrente ora, invece di guardare l'offset di scorrimento. Ecco una funzione tratta da http://markdalgleish.com/presentations/embracingtouch/ (un articolo super utile, ma un po 'datato ora)
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};
}
L'unico altro trucco era che a volte perdevo parte della mia pagina che stavo cercando di scorrere e si rifiutava di scorrere. Ho dovuto aggiungere alcune chiamate a myScroller.refresh () ogni volta che cambiavo il contenuto del #wrapper, e questo risolveva il problema.
EDIT: Un altro problema era che iScroll mangia tutti gli eventi "clic". Ho attivato l'opzione per fare in modo che iScroll emetta un evento "tocco" e ho gestito quelli invece degli eventi "clic". Per fortuna non ho avuto bisogno di fare molto clic nell'area di scorrimento, quindi non è stato un grosso problema.
window.pageYOffset
e nondocument.body.scrollTop||document.documentElement.scrollTop
come ogni altro browser / hardware esistente.