Ciao, buon anno a te.
Ho fatto qualche prova.
Non so dirti come sono arrivato al risultato.. è tardi e ora mi butto a letto.. per cui ti posto semplicemente l'esempio funzionante che ho fatto.
Se hai dubbi, chiedi.
codice:
<!DOCTYPE HTML>
<html>
<head>
<title>Esempio</title>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<style type="text/css">
#tastiera{
width:100%;
height:300px;
position:fixed;
bottom:0;
background:rgba(80,80,80,.8);
}
body{
padding-bottom:300px;
}
</style>
<script type="text/javascript">
$(function(){
var $elementi = $("input"); // collection degli elementi su cui eseguire lo scroll
var delayscroll; // delay di attivazione dello scroll dopo il resize
$elementi.focus(scrolla); // al focus su uno degli elementi, eseguo lo scroll
$(window).resize(function(){ // al resize della finestra
clearTimeout(delayscroll) // azzero e
delayscroll = setTimeout(function(){ // riattivo il delay
$elementi.filter(":focus").length && scrolla(); // se uno degli elementi ha il focus, eseguo lo scroll
},300) // tempo del delay
})
function scrolla(){ // funzione scroll
var $campoattivo = $elementi.filter(":focus"); // il campo attivo
var $tastiera = $("#tastiera"); // l'elemento tastiera
$('html, body').stop().animate( // avvio l'animazione
{
'scrollTop':
$campoattivo.offset().top // posizione del campo rispetto al documento
+$campoattivo.height()+10 // altezza del campo + un valore X di scostamento
-$tastiera.position().top // posizione della tastiera rispetto alla finestra (sostanzialmente)
}
, 300 // durata animazione
);
}
})
</script>
</head>
<body>
1<input>
<br><br><br><br>
2<input>
<br><br><br><br><br><br><br>
3<input>
<br><br><br><br><br>
4<input>
<br><br><br><br><br><br><br>
5<input>
<br><br><br><br><br><br>
6<input>
<br><br><br><br><br><br><br>
7<input>
<div id="tastiera">TASTIERA</div>
</body>
</html>