Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327

    [JQuery] aiutino animate scrollTop

    Salve a tutti ragazzi e buon anno!!!
    avrei bisogno di un aiutino in JQuery.
    Come si può evincere dall'immagine, sto realizzando una tastiera in stile iPad in HTML5 e jQuery. Ho quasi finito ma ho solo bisogno che quando seleziono un campo, parta un "animate" che effettui uno scroll e porti il campo esattamene a ridosso del bordo superiore della tastiera. Perciò ho bisogno che avvenga uno scrollBottom (che in realtà non esiste).
    La Tastiera è un div fisso con bottom a 0, tutto quello che sta dietro è scrollabile.


    Ho giocato un pò con gli offsetTop degli elementi ma non riesco a uscirne. Alla fine ho creato un pò di confusione da come si può vedere dal codice.


    codice:
    $('html, body').animate({
        'scrollTop'     : -(-(_this.DIV-TASTIERA.offset().top)+(_this.DIV-TASTIERA.offset().top+(_this.DIV-TASTIERA.offset().top-_this.CAMPO-DI-TESTO.offset().top)))+_this.CAMPO-DI-TESTO.height()
    });

    Potreste darmi una mano? grazie mille

    Schermata 2015-01-01 alle 21.23.09.jpg

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,696
    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>
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    funziona!! era quello che volevo... avevo fatto un casino con gli offset ed alla fine il calcolo era semplicissimo. Sei stato gentilissimo, grazie mille!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.