Nano Hash - криптовалюты, майнинг, программирование

Угловая анимация не переходит в IE11 и Firefox (работает в Chrome)

Моя анимация Angular, прикрепленная к div, работает в Chrome (увеличение высоты от 0 до высоты: '*'). Я импортировал все необходимые полифиллы и установил web-animations-js.

Высота увеличивается, однако в IE и Firefox не происходит перехода анимации.

анимация.ts

import {
  trigger,
  state,
  style,
  transition,
  animate
} from "@angular/animations";

export const Animations = {
  animations: [
    trigger("expansionTrigger", [
      state(
        "true",
        style({
          height: "*",
          display: "inline-block",
          width: "100%",
          overflow: "hidden"
        })
      ),
      state(
        "false",
        style({
          height: "0",
          display: "none",
          padding: "0",
          overflow: "hidden"
        })
      ),
      transition("true => false", animate("1s 100ms ease-out")),
      transition("false => true", animate("1s ease-in"))
    ]),
    trigger("fadeInTrigger", [
      state(
        "true",
        style({
          opacity: "1"
        })
      ),
      state(
        "false",
        style({
          opacity: "0"
        })
      ),
      transition("true => false", animate("1s ease")),
      transition("false => true", animate("1s 300ms ease"))
    ])
  ]
};

content.component.html

<div
[@expansionTrigger]="isExpanded === 'true' ? 'true' : 'false'"
[@fadeInTrigger]="isExpanded === 'true' ? 'true' : 'false'"
class="ds-u-sans">
    <div class="padding-20">
        <ng-content></ng-content>
    </div>
</div>

content.component.ts

import { Component } from '@angular/core';
import { Animations } from '../animations'

@Component({
  selector: 'app-accordion-content',
  templateUrl: './accordion-content.component.html',
  styleUrls: ['./accordion-content.component.css'],
  animations: [
    Animations.animations
  ]
})
export class AccordionContentComponent  {
  isExpanded: string = "false";

}

Ответы:


1

Не знаю, нашли ли вы уже решение или это действительно поможет в вашей конкретной ситуации, но у меня была аналогичная проблема, и я исправил ее, используя явные свойства marginTop / paddingBottom / etc в моих анимациях вместо сокращенного margin / padding / и т. д.

Этот комментарий к Angular Issue #16330 указал мне в этом направлении.

Я знаю, что ваша проблема связана с height, но в вашем состоянии "false" есть сокращенное свойство padding, которое заставляет меня задуматься, не на это ли зацикливаются Edge и Firefox.

Например, вместо:

state(
  "false",
  style({
    height: "0",
    display: "none",
    padding: "0",       <------
    overflow: "hidden"
  })
)

..может попробовать:

state(
  "false",
  style({
    height: "0",
    display: "none",
    paddingTop: "0",    <------
    paddingBottom: "0", <------
    overflow: "hidden"
  })
)

Кроме того, display:none может иметь странное поведение с анимацией. Переходы между display: inline-block и display: none не выполняются, а элемент можно рассматривать так, как если бы начальное состояние никогда не возникало и элемент всегда находился в своем конечном состоянии.

Возможно, вместо того, чтобы ваши состояния были "true" и "false", вы могли бы использовать '*' и 'void' с *ngIf в своем шаблоне, если это имеет смысл для вашего приложения.

Это может потребовать некоторого рефакторинга, но намерение за display:none иногда может совпадать с state('void'). Затем вместо того, чтобы позволить CSS решать, что присутствует в DOM, Angular делает это с void и *ngIf, и вы можете вообще избежать поведения css display.

Документация о состоянии Angular 'void'.

Дополнительное уточнение "void" в разделе "Параметры > имя".

Извините, если этот ответ немного расплывчатый, но эти пункты помогли мне решить аналогичные проблемы. Надеюсь, они могут указать кому-то еще в правильном направлении.

20.08.2018
  • Это сэкономило мне массу времени, спасибо, проблема все еще существует с FF 64 и @angular/animations 7.2.0. 14.01.2019
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..