4

我想按类为元素设置动画。

例如,对于每个 div 或任何按钮,我必须同时触发我想要为特定元素设置动画的动画 - 目标而不是所有目标元素。

我得到了这个结果,但我不想要那个。

在此处输入图像描述

我想要这样的东西。

在此处输入图像描述

我的代码:

home.component.ts

import { Component, OnInit, trigger, state, style, animate, keyframes, 

transition } from '@angular/core';
import { BrowserAnimationsModule } from '@angular/platform-
browser/animations';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.css'],
  animations: [

    trigger('focusPannel', [

      state('inactive', style({
        transform: 'scale(1)',
        backgroundColor: '#eee',
      })),

      state('active', style({
        position : 'fixed',
        transform: 'translate(0px, 0px)',
        top: '0px',
        left: '0px',
        backgroundColor: 'purple',
        color : 'white',
        width : '100vw',
        height : '100vh'
      })),

      transition('inactive => active', animate('4000ms ease-in')),
      transition('active => inactive', animate('4000ms ease-out'))

    ])

  ]
})
export class HomeComponent implements OnInit {

  state: string = 'inactive';

  constructor() { }

  toggleMove() {
    console.log('clicked');

    this.state = (this.state === 'inactive' ? 'active' : 'inactive');
  }

  // this func take an event on click
  gallery(id) {

    alert(id);

  }

  ngOnInit() {
  }

}

home.component.html

<div id="test" class="col s12 m4 l4 ">
    <button (click)="toggleMove()" class="waves-effect waves-light 
     btn">Press me for animation</button>
  </div>

  <div class="content" (click)="toggleMove()" [@focusPannel]='state'>animated div 1</div>
  <div class="content2" (click)="toggleMove()" [@focusPannel]='state'>animated div 2</div>

home.component.css

.content{
  padding: 20px;
  background: #eeeeee;
  position: absolute;
  left: 300px;
}

.content2{
  padding: 20px;
  background: #eeeeee;
  position: absolute;
  left: 500px;
}
4

1 回答 1

3

在单独的属性/对象中跟踪您的“按钮状态”

export class HomeComponent implements OnInit {

  state: any = {
    content: 'inactive',
    content2: 'inactive'
  }

  constructor() { }

  toggleMove(key: string /* for example */) {  
    this.state[key] = (this.state[key] === 'inactive' ? 'active' : 'inactive');
  }

  // other code

}

在模板中

<div class="content" (click)="toggleMove('content')" [@focusPannel]='state.content'>animated div 1</div>
<div class="content2" (click)="toggleMove('content2')" [@focusPannel]='state.content2'>animated div 2</div>
于 2017-04-08T14:05:30.070 回答