Было несколько проблем при создании этой работы:
Обратите внимание, что в конце кода применяется «display: none», чтобы скрыть элемент.jQuery применяет это после окончания анимации.Таким образом, проблема в том, что вы не можете анимировать дисплей: нет (очевидно, потому что там ничего нет!). Этот вопрос помог мне понять это.
Слайд-слайд jQuery просто анимирует высоту элемента, доводя его до 0.
Так что с этим знанием стало довольно легко.Сначала установите два состояния с помощью классов css и анимации:
.fb-card-open {
display: block;
}
.fb-card-closed {
display: block;
overflow: hidden;
animation: slideup;
padding-top: 0;
padding-bottom: 0;
animation-duration: 0.3s;
animation-fill-mode: forwards;
}
@keyframes slideup {
0% { height:inherit; }
100% { height:0; }
}
Это означает, что у нас есть открытое состояние и закрытое состояние на 100%, что в основном устанавливает высоту в 0 и удаляет отступы сверху и снизу(поскольку внутри анимированного элемента есть дополненный текст, поэтому даже при высоте 0 вы все равно увидите некоторое вертикальное пространство)
Затем используйте директиву [ngClass] для переключения между двумя классами:
[ngClass]="{'fb-card-open': isOpen, 'fb-card-closed' : !isOpen }"
Благодаря этой статье , которая помогла понять, как это сделать (статья посвящена AngularJS, а не Angular, но принцип такой же, как и директива [ngClass], ведет себя так же)
Примечание Если вы установите отступ: 0 вместо только сверху и снизу, вы получите крутой эффект «влетания» для дочерних элементов элемента, что является своего рода изящным бонусом, который я нашелделаем это!