Cla*_*lay 8 angular angular-animations
我正在处理的应用程序需要能够在路线中来回导航,因此当您从一个方向导航应用程序时,组件从左向右动画,当您向后导航时,它们从右向左导航.
即
component1 -> component2 = left -> right animation
component2 -> component1 = right -> left animation
Run Code Online (Sandbox Code Playgroud)
我可以在NG4中轻松实现这一点,但问题是它不会导航退出和输入组件.退出组件刚刚消失,输入组件动画显示.
我也可以在NG2中实现这一点 - 但是当你有条件动画时会出现复杂情况.即.
component2 -> component3 = left -> right animation
component2 -> component1 = right -> left animation
Run Code Online (Sandbox Code Playgroud)
这里的问题是根据下一个或上一个路线触发不同的动画.
有没有人在NG2或4中有解决方案来解决在任一方向同时动画两个视图的问题?
我没有把它放在plunkr中,因为我不知道如何设置NG4应用程序.道歉.
我的NG4解决方案基于这个演示应用程序 https://github.com/matsko/ng4-animations-preview
但基本上在我的app.component.ts我有以下动画:
animations: [
trigger('routerAnimations',[
transition('page1 => page2',[
style({transform: 'translateX(100%)'}),
animate('500ms')
]),
transition('page2 => page1', [
style({transform: 'translateX(-100%)'}),
animate('500ms')
]),
transition('page2 => page3',[
style({transform: 'translateX(100%)'}),
animate('500ms')
]),
transition('page3 => page2',[
style({transform: 'translateX(-100%)'}),
animate('500ms')
]),
transition('page3 => page4',[
style({transform: 'translateX(100%)'}),
animate('500ms')
]),
transition('page4 => page3',[
style({transform: 'translateX(-100%)'}),
animate('500ms')
])
])
]
Run Code Online (Sandbox Code Playgroud)
和一个从每个路径获取动画值并将其(?)绑定到出口变量的函数<router-outlet> in app.component.html:
export class AppComponent {
prepareRouteTransition(outlet) {
let routeData: any;
try {
routeData = outlet['_activatedRoute'].snapshot.routeConfig['animation'];
} catch(e) {
return '';
}
return routeData.value;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的函数抓取动画中用于定义转换开始和结束值的动画值:
export const APP_ROUTES = [{
path: '',
component: Page1Component,
animation: {
value: 'page1',
}
},
{
path: 'page2',
component: Page2Component,
animation: {
value: 'page2',
}
},
{
path: 'page3',
component: Page3Component,
animation: {
value: 'page3'
}
},
{
path: 'page4',
component: Page4Component,
animation: {
value: 'page4'
}
}
];
Run Code Online (Sandbox Code Playgroud)
app.component.html:
<div class="page" [@routerAnimations]="prepareRouteTransition(outlet)">
<router-outlet #outlet="outlet"></router-outlet>
</div>
Run Code Online (Sandbox Code Playgroud)
您现在可以通过定义查询:enter和:leave元素的动画来实现此目的.
此示例将动画出现路线,并顺利地在进入路线中制作动画:
const slideLeft = [
query(':leave', style({ position: 'absolute', left: 0, right: 0 ,transform: 'translate3d(0%,0,0)' })),
query(':enter', style({ position: 'absolute', left: 0, right: 0, transform: 'translate3d(-100%,0,0)' })),
group([
query(':leave',
animate('1s', style({ transform: 'translate3d(100%,0,0)' }))),
query(':enter',
animate('1s', style({ transform: 'translate3d(0%,0,0)' })))
])
]
const slideRight = [
query(':leave', style({ position: 'absolute', left: 0, right: 0 , transform: 'translate3d(0%,0,0)'})),
query(':enter', style({ position: 'absolute', left: 0, right: 0, transform: 'translate3d(100%,0,0)'})),
group([
query(':leave',
animate('1s', style({ transform: 'translate3d(-100%,0,0)' }))),
query(':enter',
animate('1s', style({ transform: 'translate3d(0%,0,0)' })))
])
]
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
animations: [
trigger('routerAnimations', [
transition('products => product-details', slideRight),
transition('product-details => products', slideLeft)
])
]
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4157 次 |
| 最近记录: |