Comment en douceur animer hauteur en CSS ou de Javascript sur les appareils mobiles

Je développe une application web HTML5 pour les appareils mobiles et a couru dans un peu de difficulté avec des animations fluides.

Essentiellement, lorsqu'un utilisateur appuie sur un bouton, d'un tiroir (un div avec height: 0px) devrait inciter à une certaine hauteur (en pixels) et du contenu sera ajouté à ce tiroir. Si vous avez un compte Pinterest, vous pouvez voir l'animation comme il est maintenant, à http://m.pinterest.com (appuyez sur le Commentaire ou Repin bouton).

Le malheureux problème est que sur les appareils mobiles, Webkit Transitions ne sont pas à accélération matérielle de la hauteur de la propriété, de sorte que son très lag et l'animation est en dents de scie.

Voici quelques extraits de code:

  1. HTML:
    ...

    <div class="pin">
        <a class="comment_btn mbtn" href="#" title="" ontouchstart="">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="margin-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;
        overflow: hidden;
        width: 100%;
        float: left;
        height: 0;
    }
    
    
    .comment {
        background: #f4eeee;
        margin-left: -10px;
        padding: 10px;
        height: 100%;
        width: 100%;
        float: left;
    }
  3. Javascript (à l'aide de jQuery):
    function showSheet(button, wrapper, height) {       
        //Animate the wrapper in.
        var css = wrapper.css({
            'height': height + 'px', 
            'overflow': 'visible',
            'margin-bottom': '20px',
            'margin-top': '10px'
        });
    
        button.addClass('pressed');
    }
    
    $('.comment_btn').click(function() {
        showSheet($(this), $(this).siblings('.comment_wrapper'), 150);
    });
  4. Captures d'écran : http://imgur.com/nGcnS,btP3W

Comment en douceur animer hauteur en CSS ou de Javascript sur les appareils mobiles

Voici les problèmes que j'ai rencontré avec Webkit Transforme que je ne peux pas tout à fait comprendre:

  1. Webkit Transforme échelle les enfants du conteneur, ce qui est indésirable pour ce que je suis en train de faire. -webkit-transform: none appliqué aux enfants ne semblent pas réinitialiser ce comportement.
  2. Webkit Transforme ne pas déplacer les éléments frères. Ainsi, la .pin le conteneur après celui que nous avons ne se déplace pas automatiquement. Ceci peut être résolu manuellement, mais c'est une corvée.

Merci beaucoup!

OriginalL'auteur Justin Edmund | 2011-10-13