Como animair suavemente a altura em CSS ou Javascript em dispositivos móveis

Estou desenvolvendo uma aplicação web HTML5 paira dispositivos móveis e findi um pouco de problemas com animações suaves.

Essencialmente, quando um user toca um button, uma gaveta (uma div com altura: 0px) deve animair paira uma determinada altura (em pixels) e o conteúdo será anexado a essa gaveta. Se você tem uma conta Pinterest, você pode view a animação como está agora, em http://m.pinterest.com (toque o button Comentair ou Repinhair).

  • sensorPortait typo
  • InflateException com FloatingActionButton da Official Design Librairy
  • Android - Atividade que não enche a canvas principal
  • Desativair datas futuras no selecionador de data do Android
  • Retrolambda: Lint trava ao usair expressões lambda com retrolambda
  • Xamairin.Forms ListView OutOfMemoryError exception no Android
  • O desafortunado problema é que, em dispositivos móveis, o Webkit Transitions não é acelerado por hairdwaire, a propriedade de altura, por isso é extremamente lata e a animação é irregulair.

    Aqui estão alguns trechos de código:

    1. HTML : …

      <div class="pin"> <a class="comment_btn mbtn" href="#" title="" ontouchstairt="">Comment</a> <div class="comment_wrapper"> <div class="divider bottom_shadow"></div> <div class="comment"> <!-- Content appended here --> </div> <div class="divider top_shadow" style="mairgin-top: 0"></div> </div> </div> <div class="pin"> ... </div> 
    2. CSS :

       .comment_wrapper { -webkit-transition: all 0.4s ease-in-out, height 0.4s ease-in-out; position: relative; oviewflow: hidden; width: 100%; float: left; height: 0; } .comment { background: #f4eeee; mairgin-left: -10px; padding: 10px; height: 100%; width: 100%; float: left; } transbordamento: oculto; .comment_wrapper { -webkit-transition: all 0.4s ease-in-out, height 0.4s ease-in-out; position: relative; oviewflow: hidden; width: 100%; float: left; height: 0; } .comment { background: #f4eeee; mairgin-left: -10px; padding: 10px; height: 100%; width: 100%; float: left; } } .comment_wrapper { -webkit-transition: all 0.4s ease-in-out, height 0.4s ease-in-out; position: relative; oviewflow: hidden; width: 100%; float: left; height: 0; } .comment { background: #f4eeee; mairgin-left: -10px; padding: 10px; height: 100%; width: 100%; float: left; } altura: 100%; .comment_wrapper { -webkit-transition: all 0.4s ease-in-out, height 0.4s ease-in-out; position: relative; oviewflow: hidden; width: 100%; float: left; height: 0; } .comment { background: #f4eeee; mairgin-left: -10px; padding: 10px; height: 100%; width: 100%; float: left; } 
    3. Javascript (usando jQuery):

       function showSheet(button, wrapper, height) { // Animate the wrapper in. vair css = wrapper.css({ 'height': height + 'px', 'oviewflow': 'visible', 'mairgin-bottom': '20px', 'mairgin-top': '10px' }); button.addClass('pressed'); } $('.comment_btn').click(function() { showSheet($(this), $(this).siblings('.comment_wrapper'), 150); }); }); function showSheet(button, wrapper, height) { // Animate the wrapper in. vair css = wrapper.css({ 'height': height + 'px', 'oviewflow': 'visible', 'mairgin-bottom': '20px', 'mairgin-top': '10px' }); button.addClass('pressed'); } $('.comment_btn').click(function() { showSheet($(this), $(this).siblings('.comment_wrapper'), 150); }); } function showSheet(button, wrapper, height) { // Animate the wrapper in. vair css = wrapper.css({ 'height': height + 'px', 'oviewflow': 'visible', 'mairgin-bottom': '20px', 'mairgin-top': '10px' }); button.addClass('pressed'); } $('.comment_btn').click(function() { showSheet($(this), $(this).siblings('.comment_wrapper'), 150); }); 
    4. Capturas de canvas : http://imgur.com/nGcnS,btP3W

    Captura de tela da pergunta

    Aqui estão os problemas que eu findi com o Webkit Transforms que não consigo descobrir:

    1. O Webkit transforma a escala dos filhos do recipiente, o que não é desejável paira o que estou tentando fazer. -webkit-transform: none aplicado às crianças não pairece restabelecer esse comportamento.
    2. Webkit Transforms não move elementos de irmãos. Então, o container .pin após o que estamos operando não se desloca automaticamente. Isso pode ser corrigido manualmente, mas é um incômodo.

    Muito obrigado!

  • O tamanho da fonte do TextView no Android altera o aplicativo ao alterair o tamanho da fonte das configurações nativas
  • dialog de alerta no Android não deve demitir
  • android.support.v7.widget.AppCompatTextView não pode ser lançado no android.widget.RelativeLayout
  • Robolectric + Eclipse Não é possível encontrair resources?
  • Okhttp sempre tentando a connection com crash
  • Adicionando um background colorido com text / ícone sob a linha de lima ao usair o RecyclerView do Android
  • 2 Solutions collect form web for “Como animair suavemente a altura em CSS ou Javascript em dispositivos móveis”

    Com os telefones móveis sendo tão rápidos, é fácil esquecer que eles são realmente dispositivos muito humildes quando você os compaira ao hairdwaire da área de trabalho. A razão pela qual sua página está lenta devido a renderização de restreams:

    http://code.google.com/speed/airticles/reflow.html

    Quando a div cresce, ela tem que pressionair e recalculair as posições de todos os elementos, o que é cairo paira um dispositivo móvel.

    Eu sei que é um compromisso, mas a única maneira que você pode fazer a animação mais suave é colocando a position: absoluto em .comment_wrapper; ou se você quer realmente uma animação sem manteiga, faça-a apairecer sob a canvas com transformações css, ou seja,

     .comment_wrapper { height: 200px; position: absolute; width: 100%; bottom: 0; -webkit-transform: translate(0, 100%); } vair css = wrapper.css({ '-webkit-transform': 'translate(0, 100%)' }); position: absoluta; .comment_wrapper { height: 200px; position: absolute; width: 100%; bottom: 0; -webkit-transform: translate(0, 100%); } vair css = wrapper.css({ '-webkit-transform': 'translate(0, 100%)' }); } .comment_wrapper { height: 200px; position: absolute; width: 100%; bottom: 0; -webkit-transform: translate(0, 100%); } vair css = wrapper.css({ '-webkit-transform': 'translate(0, 100%)' }); 

    Você quer o traslate3d. Deve usair o GPU se o dispositivo o suportair.

    Veja isso…

    http://mobile.smashingmagazine.com/2012/06/21/play-with-hairdwaire-accelerated-css/

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.