CSS3-анимация - бесконечное вращение изображения в высоком разрешении, теневое свечение

0

ОБНОВИТЬ

Теперь протестировали некоторые другие решения и создали скрипку. Код в этом скрипте верен, но анимации не могут отображаться для некоторых браузеров. Однако теперь все могут видеть, как мой убийца по производительности живет. = DI надеюсь, что это поможет найти лучшее решение для создания этой анимации!

кликните сюда

После нескольких часов тестирования альтернативы я не могу увеличить свою производительность в Firefox 25 или Internet Explorer 10. (В настоящее время в Chrome используется 15% i7-CPU). В моем проекте у меня есть жидкий div-Container, который изменяется на текущее разрешение экрана. Этот div-Container имеет закругленные границы (50%) и отображается как круг (не совсем, но это еще одна ошибка!). В этом div-Container у меня есть изображение с высоким разрешением (2880px * 2880px), которое изменяется с увеличением и шириной div-Container. Div-Container вращается бесконечно, а также обладает сияющим импульсным эффектом вокруг него. Светящийся импульсный эффект (коробка-тень) изменяет цвет и ширину, а также отображается как круг вокруг жидкого разделительного контейнера.

Я попытался восстановить эти эффекты с помощью flash, jquery и GIF-Images. С этим высоким разрешением Flash также имеет проблемы с производительностью. jQuery имеют низкий FPS и не выглядят хорошо. GIF-изображения с этим разрешением становятся большими.

Теперь вот пример:

HTML-разметка

<div id="disk">
   <div id="pulse"></div>
</div>

<script type="text/javascript">
//<![CDATA[ 
$(window).load(function(){
 function upd() {
  var h = $("body").height();
  $("#disk").height(h / 1.5);
  $("#disk").width(h / 1.5);
            }
  upd();
  window.onresize = upd;
});//]]>
</script>

CSS-разметки

#disk {
  border-radius: 50%;
  background-image: url(hires.png);
  background-size: 100% 100%;
  left:0;
  right:0;
  top: 0;
  bottom: 0;
  margin: auto auto;
  position: absolute;
  animation: rotate 5s infinite linear;
  transform: translateZ(0);
}
@keyframes rotate {
  0% {   transform: rotateZ(0);}
  100% {  transform: rotateZ(359deg); }
}
#pulse {
  position: absolute;
  border-radius: 50%;
  animation: pulse 60s infinite linear;
  left:0;
  right:0;
  top: 0;
  bottom: 0;
  margin: auto auto;
  transform: translateZ(0);
}
@keyframes pulse {
  0%  { box-shadow: 0 0 50px rgba(255,255,555,0.9); } 
  5%  { box-shadow: 0 0 200px rgba(255, 0, 0,0.9); }
  10% { box-shadow: 0 0 50px rgba(255,255,555,0.2); } 
  15% { box-shadow: 0 0 200px rgba(255, 255, 127,0.9); }
  20% { box-shadow: 0 0 50px rgba(255,255,555,0.2); } 
  25% { box-shadow: 0 0 200px rgba(255, 255, 0,0.9); }
  30% { box-shadow: 0 0 50px rgba(255,255,555,0.2); } 
  35% { box-shadow: 0 0 200px rgba(103, 255, 190,0.9); }
  40% { box-shadow: 0 0 50px rgba(255,255,555,0.2); } 
  45% { box-shadow: 0 0 200px rgba(0, 255, 0,0.9); }
  50% { box-shadow: 0 0 50px rgba(255,255,555,0.2); } 
  55% { box-shadow: 0 0 200px rgba(0, 0, 255,0.9); }
  60% { box-shadow: 0 0 50px rgba(255,255,555,0.2); } 
  65% { box-shadow: 0 0 200px rgba(75, 0, 130,0.9); }
  70% { box-shadow: 0 0 50px rgba(255,255,555,0.2); } 
  75% { box-shadow: 0 0 200px rgba(143, 0, 255,0.9); }
  80% { box-shadow: 0 0 50px rgba(255,255,555,0.2); } 
  85% { box-shadow: 0 0 200px rgba(143, 0, 255,0.9); }
  90% { box-shadow: 0 0 50px rgba(255,255,555,0.2); } 
  95% { box-shadow: 0 0 200px rgba(0,0,0,0.9); }
 100% { box-shadow: 0 0 50px rgba(255,255,555,0.9); }
}

Я знаю, что анимация box-shadow - это убийцы производительности. Но в настоящее время я не могу разработать другое решение для своего проекта. Вращение жидкого div-Container использует 5% моего i7-процессора в Chrome и многое другое. (без импульсного эффекта) Возможно, я смогу удалить некоторые ключевые кадровые фреймы и свести к минимуму количество этой анимации. Но я хочу, чтобы мои эффекты работали без проблем с производительностью в исходных условиях.

Я надеюсь, что кто-то может мне помочь. При необходимости я могу создать для вас пример. Спасибо за внимание.

Теги:
css-animations

2 ответа

1

Вы, возможно, первый человек, с которым я столкнулся, который может извлечь выгоду из этого, но это делает меня такой счастливой.

Чистый Javascript быстрее, чем jQuery. Ссылка ниже контрольных .outerHeight/.outerWidth с использованием встроенных свойств .outerHeight/.outerWidth vs. jQuery .height()/.width() и показывает, насколько родной улучшается, когда объекты сначала кэшируются.

JS Perf Benchmark

Учитывая объем обработки, требуемый вашим приложением, это может значительно увеличить ваш FPS.

Или мой компьютер просто потрясающий и ненавидит jQuery. Кто знает. Счастливое тестирование :)

  • 0
    Можете ли вы опубликовать мне полную разметку Javascript для установки высоты и ширины элемента div? (Я не знаю, как это сделать правильно)
  • 0
    Это первый на этой странице. Я даже использовал один и тот же идентификатор для удобства. Но если этого недостаточно, то document.getElementById('disk').outerHeight = 50 установит для элемента высоту 50 пикселей. То же самое относится к outerWidth . Вы также можете использовать innerHeight/innerWidth
Показать ещё 2 комментария
0

Большое спасибо u Deryck. Вы мотивировали меня искать другое решение. Рад узнать, что я могу помочь вам в этом посте.

Я не хочу использовать Javascript для этих простых функций в моем коде. Бесполезно говорить, что W3C плохо работает с CSS3. Теперь у меня эта "маленькая" проблема "решена" только с помощью css.

Я искал много веб-альбомов, но не могу найти решение для вычисления ширины, относящейся к высоте div-Container без Javascript/jQuery. После того, как я прочитал что-то о решении с некоторыми изображениями внутри контейнера с процентной высотой, я попытался увеличить width контейнера до высоты изображения. display: block; был ключом для этого решения. Все прошло правильно, пока я не загрузил свой disk-wrap. background-image не соответствует width disk-wrap. После некоторого тестирования я понял, что я не могу получить контейнер таким образом, чтобы он был центрирован по центру. Теперь я использую дополнительный disk-container disk-wrap вертикальную и горизонтальную disk-wrap.

Это работает только в том случае, если вам нужен куб с одинаковой высотой и шириной → 1:1. И этот контейнер не может изменять размер, если вы изменяете размер своего браузера, но работаете с любым разрешением. Возможно, мы можем заставить это работать на изменение размера. ;)

И вот пример:

HTML-разметка

<div id="disk-container">
 <div id="disk-wrap">
  <img id="dummy" src="dummy.png"></img><!-- 1x1 pixel transparent PNG or GIF -->
 </div>
</div>

CSS-разметки

#disk-container {
 text-align:center; /* First text-align center */
 height: 100%; width: 100%;
 margin:0; padding:0;
}
#disk-wrap {
 height: 70%; /* here u can set height and width easily -> ratio 1:1 */
 margin-top: 7.5%; /* 1/4 of rest height (30%) */
 text-align: left; display: inline-block; /* Second text-align left and display*/
 /* for ie6/7: */ *display: inline; zoom: 1;
 border-radius: 50%;
 background-image: url(hires.png);
 background-size: 100% 100%;
 background-repeat: no-repeat;
 animation: rotate 5s infinite linear;
}
#dummy {
 display: block; /* needed to display the png-Image horizontal -> width */
 height: 100%; /* needed to get the original size of parent element disk-wrap */
}

И теперь у меня 15% использования процессора с моим i7 в Chrome... без моей импульсной анимации! Есть ли шанс снизить загрузку процессора, если я перестрою свой файл высокого разрешения с помощью контейнеров div-Containers? Я знаю, как это сделать, но это тяжелая работа, и, возможно, 20 div-Containers должны были получить похожий образ.

€ dit: OH это уменьшает использование CPU в Firefox, но с импульсной анимацией все еще низким fps. IE 10 так же, как и всегда.

Во всяком случае, это не решение моих проблем с CSS-анимацией и высоким уровнем использования CPU.

€ dit2: Я буду тестировать другую коробчатую модель, чтобы центрировать вертикальный и горизонтальный div-Container. Источник можно найти здесь.

€ dit3: теперь проверено решение для выбора размера коробки и выяснено, что это не устраняет проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню