Ho bisogno di mantenere l'offset di scorrimento di un elemento in sincronia con un altro (la finestra in realtà) e ho difficoltà a farlo durante la fase inerziale "roll off" di scorrimento su Mobile Safari (iPad).Come sincronizzare l'offset di scorrimento di due elementi durante lo scorrimento inerziale
Ho un paio di div con position:fixed; overflow:hidden
e ho bisogno di continuare a compensare in sincronia con uno della finestra il loro scorrimento Di solito mi piacerebbe codificarlo come questo (jQuery) (che significa l'intero rotolo del corpo.):
var $win = $(window),
$div1 = $(...)
$win.scroll(function() {
$div1.scrollTop($win.scrollTop())
})
Ma testando l'interfaccia su un iPad, ho notato che il div non veniva aggiornato né durante la fase di tocco, quando si trascina la pagina virtuale con il dito, né durante la fase inerziale, quando si lascia andare e la pagina rallenta fino a fermarsi.
L'ho risolto per la fase di trascinamento registrando il gestore per l'evento touchmove
e lo scroll
.
Ma non riesco a trovare un modo per risolvere il problema per la fase inerziale. Il div rimane fermo (e va lentamente fuori sincrono con il resto della pagina) finché il movimento inerziale non si ferma completamente, quando l'evento di scorrimento viene finalmente attivato e salta in posizione.
Provate a scorrere su un iPad per vedere il problema "inerziale scolling". Sfortunatamente non sono riuscito a farlo funzionare su jsFiddle, a causa del comportamento strano dell'iPad con lo scorrimento dell'iframe.
Se potessi eseguire un polling solo in quella fase, potrei mantenere una sembianza di sincronizzazione tra i due elementi. Ho provato con setTimeout
, setInterval
e requestAnimationFrame
, ma nessuno di essi si attiva durante la fase di scorrimento inerziale. Sembra che tutto il Javascript si fermi durante quella fase.
Domande:
- C'è qualche tocco o evento scroll licenziato durante la fase di scrolling inerziale?
- C'è un qualsiasi modo per eseguire una richiamata Javascript durante quella fase?
- C'è un modo per sincronizzare l'offset di scorrimento di due elementi (X o Y, non entrambi) usando CSS o qualche altra tecnologia diversa da JS?
Sarebbe utile aggiungere gli elementi div come elementi figlio al livello di scorrimento? –
Cosa intendi per "livello di scorrimento"? L'elemento che scorre è la finestra, cioè l'intero corpo. Le immersioni fisse sono all'interno del corpo, sì, ma hanno "posizione: fissa". – Tobia
Sto fondamentalmente andando alle informazioni che ho qui http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/UIScrollView_pg/CreatingBasicScrollViews/CreatingBasicScrollViews.html # // apple_ref/doc/uid/TP40008179-CH101-SW1 –