Angular2 *ngFor animation of pushed away elements

前端 未结 1 1881
野的像风
野的像风 2021-02-04 07:05

I\'ve seen many animation tutorials for the entering or leaving elements (\"New element\" on the image below), but the rest of elements (Element 1 and 2), that are pushed apart

相关标签:
1条回答
  • 2021-02-04 07:33

    You can use angular2 animation API to achieve it.

    Plunker Example

    @Component({
      selector: 'my-app',
      template: `
         <div class="container">
          <div *ngFor="let item of items; let i = index" class="item"  (click)="remove(i)"
            [@anim]="item.state">
            {{ item.name }}
          </div>
        </div>
        <div class="aside">
          <button (click)="push()">Push</button>
        </div>
      `,
      animations: [
         trigger('anim', [
            transition('* => void', [
              style({ height: '*', opacity: '1', transform: 'translateX(0)', 'box-shadow': '0 1px 4px 0 rgba(0, 0, 0, 0.3)'}),
              sequence([
                animate(".25s ease", style({ height: '*', opacity: '.2', transform: 'translateX(20px)', 'box-shadow': 'none'  })),
                animate(".1s ease", style({ height: '0', opacity: 0, transform: 'translateX(20px)', 'box-shadow': 'none'  }))
              ])
            ]),
            transition('void => active', [
              style({ height: '0', opacity: '0', transform: 'translateX(20px)', 'box-shadow': 'none' }),
              sequence([
                animate(".1s ease", style({ height: '*', opacity: '.2', transform: 'translateX(20px)', 'box-shadow': 'none'  })),
                animate(".35s ease", style({ height: '*', opacity: 1, transform: 'translateX(0)', 'box-shadow': '0 1px 4px 0 rgba(0, 0, 0, 0.3)'  }))
              ])
            ])
        ])
      ]
    })
    export class AppComponent {
      items: any[] = [
        { name: 'Element 1' },
        { name: 'Element 2' }
      ];
    
      push() {
        this.items.splice(1, 0, { name: 'New element', state: 'active' });
      }
    
      remove(index) {
         this.items.splice(index, 1);
      }
    }
    

    Don't forget to import BrowserAnimationsModule

    0 讨论(0)
提交回复
热议问题