2012-05-23 9 views
10

Sto creando un sito ottimizzato per dispositivi mobili con un input di testo che filtra un elenco durante la digitazione. Il suo simile a questo: http://jquerymobile.com/test/docs/lists/lists-search.htmlScorri la pagina sullo stato di attivazione del testo per i dispositivi mobili?

Per i telefoni, sarebbe un vantaggio di usabilità se quando si seleziona l'input la pagina scorre verso il basso in modo che l'input era nella parte superiore della pagina. In questo modo, gran parte dell'elenco sottostante sarà visibile mentre digiti. È possibile e/o qualcuno ha esperienza nel farlo? Grazie

risposta

15

Concordato: sarebbe bello per l'usabilità.

Se stai usando jQuery, questo dovrebbe fare il trucco:

$('#id-of-text-input').on('focus', function() { 
    document.body.scrollTop = $(this).offset().top; 
}); 
+0

si signore, grazie! – Petrogad

+0

Grazie! C'è qualche opzione per lo scorrimento al centro della pagina? – brunodd

+0

document.body.scrollTop = $ (this) .offset() + (window.innerHeight/2); può essere? Ma vorresti assicurarti che una tastiera su schermo non si sovrapponga all'input (e non hai idea di quale pazzo personaggio X tastiera possa utilizzare sul dispositivo Y), quindi top è probabilmente più sicuro. –

6

Una soluzione migliore sarebbe:

$('#id-of-text-input').on('focus', function() { document.body.scrollTop += this.getBoundingClientRect().top - 10 });

Perché offsetTop (o .offset().top se utilizzando jQuery) restituire il distanza dal primo genitore genitore, dove è necessaria la distanza dalla parte superiore del document.

getBoundingClientRect().top restituisce la distanza tra la posizione corrente viewport all'elemento, e. se si scorre 300px sotto l'elemento, restituirebbe -300. Quindi, aggiungendo la distanza usando += si scorrerebbe fino all'elemento. -10 è facoltativo - per consentire un po 'di spazio nella parte superiore.

+0

È possibile farlo anche in Angular? – Siyah

+0

sei mancante); alla fine – Equiman

+0

Aggiunto mancante ');' –

Problemi correlati