Если вы используете ленивую загрузку, вы можете сделать что-то вроде этого ниже:
- добавить оболочку div и сделать ее фон серым (например, скелетный интерфейс) или указать его на URL (я использовал внешний, новы можете использовать img из локальных ресурсов)
- использовать условие привязки атрибута, чтобы установить src фактического img, только если это активный слайд или индекс +1 из него (вы можете изменить необходимые условия здесь)
- при загрузке фактического изображения - установите флаг в вашей модели данных, чтобы сохранить src без изменений, если изображение уже было загружено
HTML-шаблон:
<ion-content>
<div>
<ion-slides #sliders pager="true" spaceBetween="5">
<ion-slide *ngFor='let imgItem of images; index as i;'>
<div class="lazySlide">
<img class="lazyImage" [src]="(sliders.getActiveIndex() == i || sliders.getActiveIndex() == i-1) || imgItem.loaded? imgItem.source:''" (load)="imgItem.loaded=true">
</div>
</ion-slide>
</ion-slides>
</div>
</ion-content>
Пример кода компонента:
import { Component } from '@angular/core';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
images: Array<{ loaded: boolean, source: string}> = [
{
loaded: false,
source: "https://placeimg.com/1000/1000/nature"
},
{
loaded: false,
source: "https://placeimg.com/1000/1000/people"
},
{
loaded: false,
source: "https://placeimg.com/1000/1000/tech"
},
{
loaded: false,
source: "https://placeimg.com/1000/1000/architecture"
},
{
loaded: false,
source: "https://placeimg.com/1000/1000/animals"
}
]
constructor(
) {
}
}
scss:
page-home {
.lazyImage {
width: 100%;
height: 100%;
}
.lazySlide {
background: url(http://via.placeholder.com/1000x1000);
}
}