Angular 2+ Animation- Изменение цвета элемента тела

Я начинающий программист, и недавно я начал изучать Angular 4. Я пытаюсь создать личный сайт и хочу добавить анимацию.

В верхней части страницы у меня есть jumbotron с логотипом. Я хочу, чтобы при нажатии на этот логотип менялся цвет фона тела, но похоже, что функция запускает элемент.

Вот мой код на TypeScript: (Код не выдает ошибку. Он просто не делает то, что я намеревался сделать.)

@Component({
    selector: 'main-jumbotron',
    templateUrl: './jumbotron.component.html',
    styleUrls: ['./jumbotron.component.css'],
    animations: [
      trigger("changeBodyColor", [
        state('off', style({
            backgroundColor: '#CCFFCC'
        })),
        state('on', style({
            backgroundColor: '#3A3A38'
        })),
        transition('off => on', [animate('2s')]),
        transition('on => off', [animate('2s')])
      ])
    ]
})
export class JumbotronComponent implements OnInit {
     // other private instance data, constructor here, ngOnInit etc.

    colorState: string = 'off';
        toggleColor() {
            console.log('triggered ' + this.colorState);
            this.colorState = (this.colorState === 'off') ? 'on' : 'off';
    }
}

Когда я помещаю [@changeBodyColor]="colorState" в элемент div элемента jumbotron, анимация работает, но, очевидно, просто меняя цвет фона jumbotron. Когда я помещаю это в элемент body из index.html, функция срабатывает (входит в консоль), но цвет не меняется.

Я чувствую, что это проблема иерархии DOM. Если у кого-то есть представление о том, в чем проблема, пожалуйста, дайте мне знать!

2 ответа

Это может быть проблемой:

transition('off => on', [animate('2s')]),
transition('on => off', [animate('2s')])

попробуйте без скобок для параметра анимации.

transition('off => on', animate('500ms')),
transition('on => off ', animate('500ms'))

Работает для меня.

Если вы хотите изменить все тело, напишите анимацию: в компоненте, который определяет ваше тело. он не изменит ваш jumbotron или нижний колонтитул, поэтому вы можете создать div со свойствами, охватывающими весь экран, а затем применить свой триггер там [@changeBodyColor].

Другие вопросы по тегам