2017-02-07 7 views
11

目的角度アニメーション:スタイルなしのページ遷移 `position:absolute`?

よくあることは、それらのすべてがposition: absoluteまたはposition: fixedのようなスタイルを持っていることです。これは私の既存のアプリケーションレイアウトを壊します。私は角度1を使用した場合、position: absolute

<div ui-view><div>を追加する必要はありません覚えて

は、それは角度2または4で可能ですか?

+0

はあなたに、このための解決策を見つけることができました助けることができますか? –

+0

他の画面が表示されているときには絶対/固定を指定する必要があります。あなたは同じコーストでお互いをカバーする必要がありますが。私の場合は、レイアウトを破ることなく絶対に配置されたルートを許可するために、私のWebアプリケーションのCSSを書き直しました。 –

+0

今日も、私はこれに苦労しています。私たちが 'position:fixed'または' position:absolute'を追加しなければならないという事実は、本当にダムであり、私にとっては全くスマートではないようです。私は本当にAngularチームがそれより優れていることを願っています。別の方法が必要です。私のコメントは全く助けにはならない、ごめんなさい。誰かがそれをする前に何かを見つけてここに投稿しようとします。 – lkartono

答えて

0

離散アニメーションだけに絶対位置を追加できます。

transition(':enter', [   
    style({transform: 'translateX(100%)'}),  
    animate('0.3s ease-in-out', style({transform: 'translateX(0%)'})) 
]), 
transition(':leave', [   
    style({transform: 'translateX(0%)', position: 'absolute', left: 0, right: 0, top: 0}),  
    animate('0.3s ease-in-out', style({transform: 'translateX(-100%)'})) 
]) 

したがって、出発ルートは静的に配置されているので、離脱ルートのみが絶対的に配置されます。

それが動作しない場合は、お使いのルーター-コンセントが位置によってラップされていることを確認してください:ブロック

@Component({ 
    styles:[':host {display: block;}'] 
3

の話:

<div style="position: relative;"> 
    <router-outlet></router-outlet> 
</div> 

相対そして、あなたのルート要素は、ディスプレイを持っていること角度バージョン4.3.x。 routerdocumentationを読んで、ルート間にアニメーションを追加する方法を説明します。ここには怠惰なもの(自分自身を含む)のための履歴書があります。

あなたが @angular/core(とない @angular/animations)からのアニメーションライブラリをインポートしたい

import { 
    AnimationEntryMetadata, 
    animate, 
    state, 
    style, 
    trigger 
} from '@angular/core'; 

export const fadeInAnimation: AnimationEntryMetadata = trigger('fadeInAnimation', [ 
    transition(':enter', [ 
    style({ 
     opacity: 0, 
     transform: 'translateY(20px)' 
    }), 
    animate(
     '.3s', 
     style({ 
     opacity: 1, 
     transform: 'translateY(0)' 
     }) 
    ) 
    ]) 
]); 

その後、あなたのコンポーネントでは、コンポーネントのレイアウトCSSプロパティを指定するためにHostBindingデコレータを使用する(あなたが使用する必要はありません。 fixed又はabsolute位置):

import { Component, OnInit, HostBinding } from '@angular/core'; 

import { fadeInAnimation } from './../animations/fadein'; 

@Component({ 
    animations: [fadeInAnimation], 
    selector: 'app-posts', 
    templateUrl: './posts.component.html' 
}) 
export class DemandsComponent implements OnInit { 
    @HostBinding('@fadeInAnimation') fadeInAnimation = true; 
    @HostBinding('style.display') display = 'block'; 
    @HostBinding('style.position') position = 'relative'; 

    // Rest of the code 
} 

各ルーティングコンポーネントにこれを追加するには面倒であることができます。マニュアルでは、次のことを提案しています。

個々のコンポーネントにルートアニメーションを適用するのは簡単なデモでは機能しますが、実際のアプリではルートパスに基づいてルートをアニメーションする方がよいでしょう。

マティアスNiemeläからこの記事ではhttps://www.yearofmoo.com/2017/06/new-wave-of-animation-features.html#routable-animations

関連する問題