Mi sono imbattuto più volte in questo problema quando ho provato a utilizzare i div overflow: scroll
in Safari iOS.
La mia comprensione è che ha a che fare con lo scorrimento overscrolling/elastico animazioni. Ciò che sembra accadere è:
- Quando un certo contenitore (vale a dire la finestra, o il vostro div scorrimento) è in esecuzione queste animazioni gli eventi vengono bloccati per che contenitore.
- Quando un contenitore
overflow: scroll
raggiunge la parte superiore/inferiore dell'altezza di scorrimento, inizia a scorrere il contenitore principale, come nel caso di Chrome.
Si può notare nel proprio esempio che quando lo scorrimento smette di funzionare, senza toccare lo schermo per un breve periodo di tempo (ad esempio 500 ms?), Quindi provare a scorrere di nuovo funziona.
Quello che penso stia succedendo è che quando si preme la parte inferiore/superiore del contenitore a scorrimento, gli eventi vengono bloccati sul genitore, in questo caso sulla finestra. Mentre continui a interagire in questo stato, i tuoi eventi non arrivano mai al tuo contenitore a scorrimento, e quindi sembra non rispondere.
Ho avuto qualche successo in passato da non propagare gli eventi touch dal mio contenitore scorrimento fino al documento:
$('.chat-container-mobile').on({
'touchstart': _onTouchStart,
'touchmove': _onTouchMove,
'touchend': _onTouchEnd
});
function _onTouchStart(e) {
e.stopPropagation();
}
function _onTouchMove(e) {
e.stopPropagation();
}
function _onTouchEnd(e) {
e.stopPropagation();
}
Nota: Questo non sarà una correzione in molte situazioni, come spesso è necessario mantenere il comportamento della finestra di default. In questo caso, tuttavia, sembra che ci sia un layout fisso che non richiede il comportamento di scorrimento del documento predefinito. Inoltre, probabilmente continuerai a vedere lo stesso risultato se tenti di scorrere toccando la barra "Chat di gruppo" in alto o la barra in basso "Tipo di messaggio", quindi in seguito prova a scorrere all'interno del contenitore.
Si potrebbe anche provare a utilizzare e.preventDefault
su $(document)
per questi eventi tocco. Questo impedisce alla finestra di reagire a questi input utente in primo luogo, anche se questo può causare molti altri problemi se è necessario mantenere le impostazioni predefinite del browser.
Provare anche a localizzare questi binding solo in situazioni in cui è un problema. Quindi controlla iOS e Safari prima di collegarti agli eventi.
Tornerò con ulteriori risultati la prossima volta che cercherò di affrontare il problema - che, siamo onesti, è quasi ogni progetto.
Buona fortuna!
ho appena provato su un aggiornato 6S e non poteva riprodurla. Su cosa stai provando? –