如何将占位符图像添加到离子 3 应用程序中的离子幻灯片?
How to add placeholder image to ion-slides in ionic 3 app?
我想在我的图像动态加载之前将占位符图像添加到我的离子滑块。
这是我的代码:
HTML
<div *ngIf="service?.banners" class="home-banners">
<ion-slides pager="true" spaceBetween="5" loop="true" autoplay="3900">
<ion-slide *ngFor='let value of service.banners'>
<img src="{{value}}">
</ion-slide>
</ion-slides>
</div>
SCSS
.home-banners {
ion-slides {
height: 50%;
padding-left: 5px;
padding-right: 5px;
padding-top: 5px;
}
}
如果您采用延迟加载方法,您可以执行以下操作:
- 添加一个 div 包装器并将其背景设置为灰色(例如骨架 UI)或
将它指向 URL(我使用外部但你可以使用来自本地资产的 img)
- 使用属性绑定条件仅设置实际 img 的 src,如果它
是活动幻灯片或 +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);
}
}
我找到了解决方案。
只需使用 style="height:200px"
固定 div 的高度
然后在 css 文件中添加您的占位符图像。
所以当图像完全加载时,它会显示在背景图像上并隐藏它。
我想在我的图像动态加载之前将占位符图像添加到我的离子滑块。 这是我的代码:
HTML
<div *ngIf="service?.banners" class="home-banners">
<ion-slides pager="true" spaceBetween="5" loop="true" autoplay="3900">
<ion-slide *ngFor='let value of service.banners'>
<img src="{{value}}">
</ion-slide>
</ion-slides>
</div>
SCSS
.home-banners {
ion-slides {
height: 50%;
padding-left: 5px;
padding-right: 5px;
padding-top: 5px;
}
}
如果您采用延迟加载方法,您可以执行以下操作:
- 添加一个 div 包装器并将其背景设置为灰色(例如骨架 UI)或 将它指向 URL(我使用外部但你可以使用来自本地资产的 img)
- 使用属性绑定条件仅设置实际 img 的 src,如果它 是活动幻灯片或 +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);
}
}
我找到了解决方案。 只需使用 style="height:200px"
固定 div 的高度然后在 css 文件中添加您的占位符图像。 所以当图像完全加载时,它会显示在背景图像上并隐藏它。