evento di scorrimento live jQuery su dispositivo mobile (aggirare)

Il vecchio problema: far scattare l’evento di scorrimento mentre un utente sta scorrendo su un elemento mentre si trova su un sito o un’applicazione mobile (visualizzazione Web).

Tutto quello che sto cercando è l’accesso al valore scrollTop() corretto mentre un utente sta scorrendo la mia pagina su un dispositivo mobile invece di ottenerlo quando l’utente si ferma.

Sono sicuro che ci sia una soluzione da qualche parte, se sono corretto questa limitazione è impostata da iOS e ci sono state discussioni su di esso negli ultimi anni.

Ho provato a implementare emulatori scroll nativi, ma nessuno di loro sembra funzionare come voglio e, ad essere sinceri, sembra eccessivo, se tutto ciò che voglio è un persistente scrollTop() mentre un utente sta scorrendo.

Attualmente sto pensando di avviare un contatore su touchStart e di fermarlo su touchStop ma qualcosa mi dice che sto perdendo tempo.

Qualche aiuto ragazzi?

Con jQuery:

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

Questo dovrebbe darti un stream consistente del valore scrollTop quando l’utente scorre, ma stai attento mentre sta andando a fuoco anche mentre l’utente sta semplicemente tenendo il dito sullo schermo.

Nota che se usi jQuery> = 1.7 il metodo di associazione preferito è .on() invece del metodo .bind() che ho usato nel mio esempio. In tal caso il mio esempio sarebbe

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

Fonte: https://github.com/dantipa/pull-to-refresh-js/blob/master/jquery.plugin.pullToRefresh.js

forse potresti dare un’occhiata a come iScroll lo fa nel loro _move -method che è associato all’evento touchmove : https://github.com/cubiq/iscroll/blob/master/src/core.js#L152

È un po ‘complicato, ma sono sicuro che lo capirai. Puoi anche usare iScroll per iniziare e associarlo al loro evento scrollmove (non sono sicuro di come è stato chiamato su iScroll 5 ma era onScrollMove in iScroll 4). that.y ti darà quindi il valore corretto.

Ho dovuto seguire il percorso iScroll per farlo. Ho scritto la mia implementazione qui: https://stackoverflow.com/a/23140322/229315