Цель : анимировать затухание в элементе с Typescript в Angular, используя
document.getElementById("elementID").animate
Я использовал пример (немного его изменил) с developer.mozilla.org
Ожидается: для работы без ошибок.
Фактические результаты: код работает, но имеет Chrome ошибок разработчика.
Chrome подробности ошибки:
core. js: 3838 ОШИБКА TypeError: Невозможно прочитать свойство 'animate' со значением null
на PlywoodHebComponent.pu sh .. / src / app / components / plywood-heb / plywood-heb.component.ts.PlywoodHebComponent.fadeIn (plywood-heb.component.ts: 22)
на PlywoodHebComponent.pu sh .. / src / app / components / plywood-heb / plywood-heb.component .ts. (ядро. js: 14774)
в SafeSubsc riber.schedulerFn [as _next] (core. js: 24856)
в SafeSubscriber.pu sh .. / node_modules / rxjs / _esm5 / internal / Subscriber. js .SafeSubscriber .__ tryOrUnsub (подписчик. js: 192)
на SafeSubscriber.pu sh .. / node_modules / rxjs / _esm5 / internal / Subscriber. js .SafeSubscriber.next (подписчик. js: 130)
на подписчике. pu sh .. / node_modules / rxjs / _esm5 / internal / Subscriber. js .Subscriber._next (Подписчик. js: 76)
в Subscriber.pu sh .. / node_modules / rxjs / _esm5 / internal / Subscriber. js .Subscriber.next (подписчик. js: 53)
ОБНОВЛЕНИЕ:
Что я пытался: I увидел, что если я сотру * ngIf, проблема исчезнет. Что означает, что элемент проверяется на предмет его идентификатора в fadeIn () до его появления в DOM. Я думаю, что я должен использовать видимость вместо * ngIf.
Какой-то код:
HTML:
<nav class="sidebar">
<text-style2-container>
<app-plywood-side-navbar (stringOutput)=getChildEvent($event)></app-plywood-side-navbar>
</text-style2-container>
</nav>
<article>
<div class="description-text" *ngIf="imageName=='twin';">
<text-style1-container>
<app-twin-heb></app-twin-heb>
</text-style1-container>
</div>
<div class="description-text" *ngIf="imageName=='okoume';">
<text-style1-container>
<app-okoume-heb></app-okoume-heb>
</text-style1-container>
</div>
<div class="description-text" *ngIf="imageName=='birch';">
<text-style1-container>
<app-birch-heb></app-birch-heb>
</text-style1-container>
</div>
</article>
<div class="image-box" *ngIf="imageName;">
<!-- "image" id element is fading in using the typescript but has errors on chrome developer mode -->
<img id="image" src="../../../assets/images/plywoods/{{imageName}}-plywood.jpg" alt="{{imageName}} plywood">
</div>
Машинопись:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-plywood-heb',
templateUrl: './plywood-heb.component.html',
styleUrls: ['./plywood-heb.component.css']
})
export class PlywoodHebComponent {
imageName: string;
getChildEvent($event) {
this.imageName = $event;
this.fadeIn();
}
fadeIn(): void {
document.getElementById("image").animate([
// keyframes
{ opacity: '0' },
{ opacity: '1' }
], {
duration: 2000,
});
}
}
CSS:
.sidebar, .image-box, .description-text, img {
box-sizing: border-box;
float: right;
}
.sidebar, .image-box, .description-text {
text-align: right;
padding-top: 150px;
}
.sidebar {
width: 15%;
padding-right: 50px;
}
.image-box, .description-text {
width: 40%;
}
.image-box {
margin-top: 2rem;
}
img {
width: 50%;
padding-right: 100px;
/* fading in animation for autoran plywood route */
animation-name: fadeInAnimation;
animation-duration: 5s;
}
.description-text {
text-align: right;
padding-right: 100px;
}
@keyframes fadeInAnimation {
from { opacity: 0;}
to { opacity: 1;}
}
Редактировать: добавление также индекса. html, поскольку в нем нет js В нем.
индекс . html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>אורי גרוס עצים ולבידים</title>
<base href="/">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body dir="rtl">
<app-Layout></app-Layout>
</body>
</html>