Angular2 анимированный [скрытый] элемент
у меня есть боковая панель, которую я показываю / скрываю, используя логическое значение:
[hidden]='toggleSidebar'
Я пытался найти правильный способ добавить переход к этому элементу, но до сих пор был только частично успешным с помощью этого метода :
[class.show]='!toggleSidebar'
. Однако применение стилей css к этому классу работает только частично.
как добавить слайд-в или fade-в анимации к элементу, содержащему маршрутизатор розетки, такие как это?
<aside [hidden]="toggleSidebar">
<router-outlet name="aside"></router-outlet>
</aside>
2 ответов
С помощью [hidden]
атрибут вы просто не можете достичь эффекта перехода/анимации, так как нет никаких последующих изменений шага, а только изменения состояния, которые отражают либо элемент виден или скрыт.
что вы можете сделать, это использовать opacity
и visibility
.
<aside class="sidebar" [style.opacity]="toggleSidebar ? '0' : '1'" [style.visibility]="toggleSidebar ? 'hidden' : 'visible'">
<router-outlet name="aside"></router-outlet>
</aside>
укажите время перехода для боковой панели для изменения состояния.
.sidebar {
transition: all .3s;
}
Примечание: его лучше избегать [hidden]
атрибут, если вы с нетерпением ждете поддержки Internet Explorer 9 и 10. :)
желаемое поведение может быть достигнуто с ngIf
. От официальное руководство:
недействительной государственной
специальное состояние void может применяться к любой анимации. Он применяется, когда элемент не присоединен к представлению, возможно, потому, что он еще не добавлен или удален. Состояние void полезно для определения анимации ввода и вывода.
в примере ниже div показывает вверх от верхней части экрана когда условие оценивается как true.
HTML:
<div *ngIf="panelVisible" [@panelInOut]>....</div>
TS:
@Component({
....
animations: [
trigger('panelInOut', [
transition('void => *', [
style({transform: 'translateY(-100%)'}),
animate(800)
]),
transition('* => void', [
animate(800, style({transform: 'translateY(-100%)'}))
])
])
]
})