Анимация Angular 7 вызывает проблему перекрытия z-индекса в браузерах webkit

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

Код анимации такой:

@Component({
  selector: 'track-page',
  templateUrl: './track-page.component.html',
  styleUrls: ['./track-page.component.scss'],
  animations: [
    trigger('fadeIn', [
      transition(':enter', [
        query('*', style({opacity: 0})),
        query('*', [
            animate('500ms', style({opacity: 1}))
        ]),
      ])
    ]),
    trigger('swipeUp', [
      transition('void => *', [
        query('*', style({opacity: 0, transform: 'translate3d(0,20%,0)'})),
        query('*', stagger(10, [
          animate('700ms ease-in', keyframes([
            style({opacity: 1, transform: 'none', offset: 1})
          ]))
        ]))
      ])
    ])
  ]
})

Этот код приводит к следующему результату только в браузерах webkit: Анимация Angular 7 вызывает проблему перекрытия z-индекса в браузерах webkit

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

Этот код содержит ошибку, недопустимый или неожиданный токен в строке 13. Отображается ли ошибка в консоли вашего браузера?

Andy G 12.03.2019 14:45

Кроме того, на этом изображении вы что-то обвели, но не объяснили, в чем проблема. Что происходит или не происходит?

Andy G 12.03.2019 14:49

Извините, я не хотел добавлять исполняемый фрагмент. Я удалил его сейчас, но с анимацией нет ошибки. Он анимируется правильно, но у меня осталась проблема с z-индексом. Компонент общего доступа должен отображаться перед любым другим элементом, но над ним должен отображаться значок метронома.

Jack_b_321 12.03.2019 14:50

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

Andy G 12.03.2019 14:53

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

Jack_b_321 12.03.2019 14:55

Вы проверили метроном в своем браузере, чтобы узнать, откуда он берется и где он находится по отношению к вашему компоненту?

Andy G 12.03.2019 14:56

Я нашел решение. Angular при компиляции анимации не должен добавлять свойство -wekit-transform в css, что означало, что в браузерах webkit оно не работало правильно. Я добавил свойства преобразования webkit в свой css, и это сработало.

Jack_b_321 12.03.2019 15:11

Я рад, что вы решили? Должен ли Angular автоматически добавлять префиксы поставщиков? Я знаю, что есть библиотеки, которые могут это сделать, но не верьте, что это встроено. В любом случае...

Andy G 12.03.2019 15:14

Загрузчик Angulars scss добавляет префиксы поставщиков, но я не думаю, что это происходит на стороне javascript (угловые анимации)

Jack_b_321 12.03.2019 15:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
9
1 801
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я нашел решение, я попытался изменить свой translate3d просто на translateY, но это не имело значения. Поэтому я установил transform: translate3d(0, 0, 1px); для компонента общего доступа, который должен был иметь самый высокий z-индекс, компонент общего доступа теперь корректно перекрывает любой другой элемент во всех браузерах.

JFI Я разобрался с переполнением: скрытый; к родительскому элементу

Whisher 18.06.2020 12:26

У меня была аналогичная проблема с z-indexes и анимацией (элементы с индексами> 0 перекрывали компонент во время перехода), и эта статья был очень полезен. Вам просто нужно установить z-index в стиле до и после анимации. Не забудьте position: relative заставить работать z-индексы.

transition(
    "void => prev", // ---> Entering --->
    [
        // In order to maintain a zIndex of 2 throughout the ENTIRE
        // animation (but not after the animation), we have to define it
        // in both the initial and target styles. Unfortunately, this
        // means that we ALSO have to define target values for the rest
        // of the styles, which we wouldn't normally have to.
        style({
            left: -100,
            opacity: 0.0,
            zIndex: 2
        }),
        animate(
            "200ms ease-in-out",
            style({
                left: 0,
                opacity: 1.0,
                zIndex: 2
            })
        )
    ]
),

Другие вопросы по теме