Подтвердить что ты не робот

CSS: анимация против перехода

Итак, я понимаю, как выполнять как CSS3-переходы, так и анимации. Что непонятно, и я googled, когда использовать.

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

Однако есть случаи, когда указанный эффект может быть достигнут в любом случае. Простым и распространенным примером будет реализация меню раздвижного ящика в стиле facebook:

Этот эффект может быть достигнут посредством таких переходов:

.sf-page {
    -webkit-transition: -webkit-transform .2s ease-out;
}

.sf-page.out {
    -webkit-transform: translateX(240px);
}

http://jsfiddle.net/NwEGz/

Или, используя такие анимации:

.sf-page {
    -webkit-animation-duration: .4s;
    -webkit-transition-timing-function: ease-out;
}

.sf-page.in {
    -webkit-animation-name: sf-slidein;
    -webkit-transform: translate3d(0, 0, 0);
}

.sf-page.out {
    -webkit-animation-name: sf-slideout;
    -webkit-transform: translateX(240px);
}

@-webkit-keyframes sf-slideout {
    from { -webkit-transform: translate3d(0, 0, 0); }
    to { -webkit-transform: translate3d(240px, 0, 0); }
}

@-webkit-keyframes sf-slidein {
    from { -webkit-transform: translate3d(240px, 0, 0); }
    to { -webkit-transform: translate3d(0, 0, 0); }
}

http://jsfiddle.net/4Z5Mr/

С HTML, который выглядит так:

<div class="sf-container">
    <div class="sf-page in" id="content-container">
        <button type="button">Click Me</button>
    </div>
    <div class="sf-drawer">
    </div>
</div>

И этот сопровождающий jQuery script:

$("#content-container").click(function(){
    $("#content-container").toggleClass("out");
    // below is only required for css animation route
    $("#content-container").toggleClass("in");
});

Что я хотел бы понять, каковы плюсы и минусы этих подходов.

  • Одно очевидное отличие заключается в том, что анимация занимает намного больше кода.
  • Анимация дает лучшую гибкость. У меня может быть разная анимация для выскакивания и
  • Есть ли что-то, что можно сказать о производительности. Обе используют преимущества ускорения h/w?
  • Что более современно и как идти вперед.
  • Что еще вы можете добавить?
4b9b3361

Ответ 1

Похоже, у вас есть инструкция о том, как их выполнять, а не когда делать это.

Переход представляет собой анимацию, только одну, которая выполняется между двумя различными состояниями - то есть начальным состоянием и конечным состоянием. Как и в меню ящика, состояние начала может быть открытым и конечное состояние может быть закрыто или наоборот.

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

Ответ 2

Я дам определениям самим говорить (по словам Мерриама-Вебстера):

Переход: движение, развитие или эволюция из одной формы, стадии или стиля в другой

Анимация: наделена жизнью или качествами жизни; полный движения

Имена соответствующим образом соответствуют их целям в CSS

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

Ответ 3

  • Анимация требует гораздо больше кода, если вы не используете один и тот же переход много раз и в этом случае анимация будет лучше.

  • У вас могут быть разные эффекты для вставки и выключения без анимации. Просто измените как исходное правило, так и измененное правило:

    .two-transitions {
        transition: all 50ms linear;
    }
    
    .two-transitions:hover {
        transition: all 800ms ease-out;
    }
    
  • Анимация - это просто абстракции переходов, поэтому, если переход на аппаратное ускорение, анимация будет. Это не имеет значения.

  • Оба очень современные.

  • Мое эмпирическое правило состоит в том, что я использую один и тот же переход три раза, вероятно, это анимация. Это легче поддерживать и изменять в будущем. Но если вы используете его только один раз, это больше набирает анимацию и, возможно, не стоит.

Ответ 4

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

Переходы с другой стороны указывают, как свойство (или свойства) должно выполнить их изменение. Каждое изменение. Установка нового значения для определенного свойства, будь то с помощью JavaScript или CSS, всегда является переходом, но по умолчанию она негладкая. Установив transition в стиле css, вы определяете другой (плавный) способ выполнения этих изменений.

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

Ответ 5

Краткий ответ, прямо на точку:

Переход:

  1. Требуется запускающий элемент (: hover,: focus и т.д.)
  2. Только 2 состояния анимации (начало и конец)
  3. Используется для более простой анимации (кнопки, выпадающие меню и т.д.)
  4. Легче создавать, но не так много возможностей анимации/эффектов

Анимация @keyframes:

  1. Может использоваться для бесконечной анимации
  2. Можно установить более 2 состояний
  3. Не имеющий границ

Оба используют ускорение процессора для более плавного эффекта.

Ответ 6

Есть ли что-то, что можно сказать о производительности. Используют ли оба преимущества ч/б ускорения?

В современных браузерах ч/б ускорение происходит для свойств filter, opacity и transform. Это как для CSS-анимации, так и для CSS-переходов.

Ответ 7

Я верю анимация CSS3 против перехода CSS3 даст вам ответ, который вы хотите.

В основном ниже приведены несколько вылетов:

  • Если производительность является проблемой, выберите переход CSS3.
  • Если состояние должно поддерживаться после каждого перехода, выберите переход CSS3.
  • Если анимацию нужно повторить, выберите анимацию CSS3. Потому что он поддерживает анимацию-итерацию-счет.
  • Если требуется сложная анимация. Тогда предпочтительна анимация CSS3.