我有一个页面,上面有项目列表。当您单击项目时,您将激活路由器链接,您将被转移到特定滚动位置的另一个页面。但最近我为页面上的所有过渡添加了角度动画。动画现在停止 scrollIntoView 并且只是将您转移到页面顶部。我仍然希望转换工作,但我也想保留我的 scrollIntoView 功能。
这是我想通过 scrollIntoView 工作的页面的 TS 文件。
ngOnInit() {
this.route.fragment.subscribe(fragment => { this.fragment = fragment; });
}
ngAfterViewChecked(): void {
try {
if ( this.fragment) {
document.querySelector('#' + this.fragment).scrollIntoView({ behavior: 'smooth', block: 'start' });
}
} catch (e) { }
}
我正在使用 id 属性转换到页面上的特定位置。
<div *ngFor="let work of works">
<app-work [work]="work" [attr.id] = "work.Title" ></app-work>
</div>
这就是路由器模块的样子。
const routes: Routes = [
{ path: '', component: TimelineComponent, data: { animation: 'home' }},
{ path: 'Projects', component: ProjectsComponent, data: { animation: 'projects' } },
{ path: 'Education', component: EducationComponent, data: { animation: 'education' } },
{ path: 'Resume', component: ResumeComponent, data: { animation: 'resume' } },
{ path: 'Jobs', component: JobsComponent, data: { animation: 'jobs' } },
{ path: 'Contact', component: ContactComponent, data: { animation: 'contact' } },
{ path: 'Snapchat', component: SnapchatComponent, data: { animation: 'snapchat' } }
];
@NgModule({
imports: [RouterModule.forRoot(routes, {
scrollPositionRestoration: 'enabled',
anchorScrolling: 'enabled',
}) ], // after routes, { enableTracing: true}
exports: [RouterModule]
})
export class AppRoutingModule { }
ScrollIntoView 本身就可以正常工作。但是一旦我添加了动画,它就会中断。
这就是我使用 routerlink 上的片段调用 scrollintoview 的方式。
<li [routerLink]="['./Jobs']" fragment="Destime">
但比我添加的动画。
animations: [
trigger('routerAnimation', [
transition('* <=> *', [
query(':enter, :leave', style({ position: 'fixed', width: '100%' }), { optional: true }),
group([
query(':enter', [
style({ transform: 'translateX(100%)' }),
animate('0.5s ease-in-out', style({ transform: 'translatey(0%)' }))
], { optional: true }),
query(':leave', [
style({ transform: 'translateX(0%)' }),
animate('0.5s ease-in-out', style({ transform: 'translateX(-100%)' }))
], { optional: true }),
])
])
])
]
getRouteAnimation(outlet: RouterOutlet): string {
return outlet.activatedRouteData['animation'] || 'no-animation';
}
很抱歉这篇长文,但我的问题是如何仅在特定路由器链接上禁用动画?
如:
<li [routerLink]="['./Jobs']" fragment="Destime">
或者我如何改进动画,以便在动画之后它仍然执行滚动?
注意我有到同一页面的转换,因此禁用整个页面上的动画,如 * => thepage,将不起作用。因为我通常需要使用动画来访问它。