Pracuję nad aplikacją HTML5 dla urządzeń mobilnych i mam problemy z płynnymi animacjami.Jak płynnie animować wysokość w CSS lub Javascript na urządzeniach mobilnych
Zasadniczo, gdy użytkownik dotknie przycisku, szuflada (element div o wysokości: 0 pikseli) powinna animować się do określonej wysokości (w pikselach), a zawartość zostanie dołączona do tej szuflady. Jeśli masz konto na Pinterest, możesz zobaczyć animację taką, jaka jest teraz, pod numerem http://m.pinterest.com (dotknij przycisku Skomentuj lub Odpnij).
Niefortunnym problemem jest to, że na urządzeniach przenośnych, Webkit Transitions nie są przyspieszane sprzętowo właściwości height, więc jest bardzo opóźniony, a animacja jest postrzępiona.
Oto niektóre fragmenty kodu:
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>
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; }
JavaScript (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); });
ekranu: http://imgur.com/nGcnS,btP3W
Oto ja problemy napotkane z Webkit przeobraża, że nie mogę dowiedzieć się, całkiem :
- Webkit Przekształca skalę elementów potomnych kontenera, co jest niepożądane w przypadku tego, co próbuję wykonać.
-webkit-transform: none
zastosowane do dzieci nie wydają się resetować tego zachowania. - Przekształcenia w sieci Web nie przenoszą elementów siostrzanych. Tak więc kontener
.pin
po tym, na którym działamy, nie zostanie automatycznie opuszczony. Można to naprawić ręcznie, ale jest to uciążliwe.
Wielkie dzięki!
Dzięki dużo! Wiedza o tym jest bardzo pomocna. Jestem pewien, że zamierzam ponownie rozważyć tę interakcję, ale dla odniesienia, co masz na myśli mówiąc, że pojawi się ona pod ekranem z transformacjami? –
Edytował odpowiedź z przykładowym kodem, przykładem jest wirtualna klawiatura, która przesuwa się z dołu ekranu. – Duopixel
Jeśli użyjesz 'translate3d (0, 100%, 0)' to jest jeszcze szybsze, ponieważ przyspiesza sprzętowa akceleracja :) – Timo