Создание жидких частиц HTML5 на большом холсте

Я новичок в html5/CSS3/jquery, и я делаю это (еще не закончил): http://catherinearnould.sio4.net/autres/kat/ Проблема в том, что из-за большого холста с частицами анимация не такая плавная, как могла бы. Так что, если вам скучно, не стесняйтесь взглянуть на мой код и дать мне несколько советов по улучшению плавности ^^

Большое спасибо!


person Kateriine    schedule 12.01.2012    source источник


Ответы (3)


Например, использование RequestAnimationFrame() вместо setTimeout(), вероятно, сделает все более плавным. См. запись в блоге Пола Айриша requestAnimationFrame для умной анимации.

person Maurice    schedule 12.01.2012
comment
Хорошо, сделано, но только немного лучше. Я думаю, это из-за фоновых изображений - person Kateriine; 13.01.2012
comment
... И другая проблема в том, что cancelAnimationFrame работает только с Chrome:/ - person Kateriine; 13.01.2012
comment
Большую часть времени вам не нужно отменять AnimationFrame. Просто больше не вызывайте requestAnimationFrame(). - person Maurice; 14.01.2012

Большие потери производительности, скорее всего, вызваны динамически вычисляемыми/визуализируемыми атрибутами CSS, такими как прозрачность, тени и закругленные углы.

Также имейте в виду, что изменения в элементах DOM, вызывающие перекомпоновку, обходятся дорого (например, анимация), см. http://code.google.com/speed/articles/reflow.html.

Я вижу большую разницу сразу после запуска этого:

$('*').css({backgroundColor:'transparent', opacity:1, boxShadow:'none'});

Если можете, замените всю (полу-)прозрачную и закругленную графику эквивалентными изображениями png.

person bennedich    schedule 13.01.2012
comment
Хорошо, я изменил полупрозрачные элементы и порядок анимации, теперь это выглядит довольно хорошо для меня. Спасибо! - person Kateriine; 14.01.2012

Вы также можете подумать об использовании перехода css3 для некоторой анимации и удалении и добавлении новых классов к элементам для изменения их стилей, а не делать это с помощью javascript (jQuery). Используйте jQuery в качестве запасного варианта для старых браузеров и IE.

http://www.w3.org/TR/css3-transitions/

http://net.tutsplus.com/tutorials/html-css-techniques/css-fundametals-css-3-transitions/

Это дает браузеру возможность выполнять рендеринг, а в некоторых случаях, например в iOS, вы можете получить аппаратное ускорение для рендеринга.

Что касается элемента холста, у меня мало опыта в этом, но меня интересует тот эффект, который вы создаете. Но я думаю, что массовая анимация холста в начале — это слишком, столько всего уже происходит, может быть, в этом эффекте нет необходимости? Просто мое мнение как пользователя.

person Einar Ólafsson    schedule 13.01.2012
comment
Ну, на самом деле вы правы, я думаю, что я должен использовать CSS3 вместо js для фона. (когда отключаю js фоны, патрицы работают отлично) Сделаю еще скрипт для IE (блин, я учил, что с ним проблемы кончатся) - person Kateriine; 13.01.2012
comment
Хорошо, я пробовал фоны CSS3, но переходы на фоне изображений невозможны, потому что это строка (как я читал). Итак, теперь я изменил порядок анимаций, и это выглядит довольно мило для меня ^^ - person Kateriine; 14.01.2012