2010-08-11 4 views
147

Можно создать дубликат:
iphone webkit css animations cause flickerПредотвращение мерцания на WebKit-переход WebKit-преобразования

По какой-то причине, прямо перед моей анимации из WebKit-преобразования происходит свойство, есть небольшое мерцание. Вот что я делаю:

CSS:

#element { 
    -webkit-transition: -webkit-transform 500ms; 
} 

JavaScript:

$("#element").css("-webkit-transform", "translateX(" + value + "px)"); 

Непосредственно перед переход происходит, есть мерцание. Любая идея, почему это так, и как я могу решить проблему?

Спасибо!

Обновление: Это происходит только в Safari. Это не происходит в Chrome, хотя анимация работает.

+0

Я заметил самую проблему в iOS 4.2 beta 2. – rpitting

+1

происходит для меня на FF версии 17.0 сейчас ... с масштабированными объектами, которые масштабируются за пределами размера окна – vsync

+0

Поведение всегда в Chrome в некоторых случаях ... –

ответ

257

Решение упомянуто здесь: iPhone WebKit CSS animations cause flicker.

Для вашего элемента вам необходимо установить

-webkit-backface-visibility: hidden; 
+11

Мои переходы затрагивали другие элементы на сайте, и мне в итоге пришлось добавьте правило ко всем элементам сайта. – mlunoe

+0

Работал и для меня. У меня было скрытое меню, которое подталкивало содержимое вниз с помощью анимации CSS, когда оно было показано. Применяя приведенное выше правило к моему основному содержанию div, которое следовали за скрытым меню, я исправил свою проблему без существенного влияния на производительность. NB: Когда я применил его к моему глобальному правилу HTML, он сделал анимацию CSS немного хуже, остерегайтесь! – Primus202

+3

Использование селектора подстановочных знаков для этого свойства фактически вызвало дополнительное мерцание от других элементов. Мое рабочее решение состояло в том, чтобы выборочно применять свойство к элементам, которые были переведены. – hlfcoding

1

Оба указанных выше двух ответов работать для меня с подобной проблемой.

Тем не менее, подход {-webkit-transform} тела заставляет все элементы на странице эффективно отображаться в 3D. Это не самое худшее, но это немного изменяет рендеринг текста и других элементов в стиле CSS.

Это может быть эффект, который вы хотите. Это может быть полезно, если вы делаете лот преобразования на вашей странице. В противном случае -webkit-backface-visibility: скрытый на элементе ваш преобразование является наименее инвазивным вариантом.

77

Правило:

-webkit-backface-visibility: hidden; 

не будет работать для спрайтов или изображения фона.

body {-webkit-transform:translate3d(0,0,0);} 

удаляет фоны, которые выложены плиткой.

Я предпочитаю, чтобы сделать класс не называется не-Флик и сделать это:

.no-flick{-webkit-transform:translate3d(0,0,0);} 
+5

Вы правы, исправление обратной видимости не работает на фоне изображений. Благодарю. – ppcano

+5

Обратите внимание, что при использовании translate3d (0,0,0) _anywhere_ Chrome теперь разбивает любую фоновую позицию: обложка, которую вы можете или не можете иметь. – Norris

+6

Awww, yeeeaaah. Как масло. – gfullam

13

Для более подробного объяснения, проверить это сообщение:

http://www.viget.com/inspire/webkit-transform-kill-the-flash/

Я определенно избежать применения это всему телу. Ключ должен удостовериться, что какой-либо конкретный элемент, который вы планируете преобразовать в будущем, запускается в 3d, поэтому браузеру не нужно включать и отключать режимы рендеринга.Добавление

-webkit-transform: translateZ(0) 

(или любой из упомянутых вариантов) для анимированного элемента выполнит это.

+1

Это сработало после ввода фактического значения в: transform: translateZ (0.1px) – bob

16

мне пришлось использовать:

-webkit-perspective: 1000; 
-webkit-backface-visibility: hidden;  

на элементе, или я бы все еще получить FLICKR в первый раз переход произошел после загрузки страницы

4

Триггер аппаратного ускоренного рендеринга для проблемного элемента. Я бы советовал не делать этого на тегах *, body или html для производительности.

.problem{ 
    -webkit-transform:translate3d(0,0,0); 
} 
46

Добавить это CSS свойство к элементу, мелькнуло:

-webkit-transform-style: preserve-3d; 

(И большое спасибо Натан Hoad: http://nathanhoad.net/how-to-stop-css-animation-flicker-in-webkit)

+0

Мне нужно было использовать это, чтобы заставить вещи перестать мерцать. – matthewpavkov

+0

Life saver! Благодарю. обратная видимость: скрытая; не работал для меня. Это было :-) –

11

Я обнаружил, что применение -webkit-backface-visibility: hidden; к элементу поступательного и -webkit-transform: translate3d(0,0,0); всем своим детям, мерцание затем исчезает

 Смежные вопросы

  • Нет связанных вопросов^_^