Доброго времени суток.
Имею компонент:
class NotificatorComponent {
public notifications$: Subject<Array<Notification>> =
new Subject();
// ...
public removeNotification(notificationId: number): void {
const notification: Notification =
this.notifications.find(x => x.id === notificationId);
const notificationIndex: number =
this.notifications.indexOf(notification);
this.notifications.splice(notificationIndex, 1);
this.whenUpdateNotifications$.next(this.notifications);
}
}
В рамках которого используются массив из моделей:
interface Notification {
id?: number;
message: string;
type: string;
delay?: number;
}
И визуальный шаблон для него (pug
-минифицированный html):
.notifications
.notification(
*ngFor='let notification of (notifications$ | async)',
[ngClass]='notification.type.toLowerCase()'
)
.notification-header {{ notification.type }}
span.close(
(click)='removeNotification(notification.id)'
) ×
.notification-body {{ notification.message }}
Элементы в notifications$
добавляются динамически в процессе работы приложения.
Хочу организовать следующее:
При добавлении новой нотификации (пуша в сабж notifications$
) чтобы визуальный элемент появлялся с анимацией (например fade-in).
Пробовал через css-анимации
notification:last-of-type
animation fadein 0.5s
animation-iteration-count 1
@keyframes fadein
from
bottom 0
opacity 0
to
bottom 30px
opacity 1
Но в данном случае проблема случается при удалении, что последний элемент повторяет анимацию (оно и логично, ведь селектор описан так) - гиф с ошибкой
Вопрос:
notification$
) имел определенное время жизни, а после чего по анимации удалялся (как визуально, так и из массивов)?Ответ на 2й вопрос:
С помощью rxjs:
private whenNotificationDismissDelayed$: Subject<number> =
new Subject();
constructor(
) {
this.whenNotificationDismissDelayed$
.pipe(
takeUntil(this.whenComponentDestroy$),
delay(5 * 1000),
)
.subscribe(notificationIndex => {
this.removeNotification(notificationIndex);
});
this.whenNotificationRecieved$
.pipe(
// ...
)
.subscribe(notification => {
// ...
this.whenNotificationDismissDelayed$.next(notification.id);
});
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Столкнулся я с проблемой изменения кода функции в целях оптимизации (прошу прощения за си-стиль):
Есть класс в котором есть вот такая переменная
Нужно подключить SFML для работы в VS Code на WindowsНикакой адекватной информации не нашел, разве что для Linux