typescript Ionic 2 / Ionic 3 / Ionic 4 : (Lazy) 加载图片的微调器
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/38846271/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Ionic 2 / Ionic 3 / Ionic 4 : (Lazy) Loading spinner for pictures
提问by Guillaume Le Mière
I'm using ion-img in my ionic2 application to load my pictures correctly. However, I wonder if there is a way to indicate to the user that the picture is actually loading.
我在我的 ionic2 应用程序中使用 ion-img 来正确加载我的图片。但是,我想知道是否有一种方法可以向用户指示图片实际上正在加载。
Thank you for your help!
谢谢您的帮助!
EDIT : Here is the answer if you absolutely need to use the ion-img tag. If not, you should use ionic-image-loaderas AdminDev826suggested.
编辑:如果您绝对需要使用 ion-img 标签,这里是答案。如果没有,您应该按照AdminDev826 的建议使用ionic-image-loader。
I finally solved that problem with CSS! When an image is loading in ionic 2, the ion-img tag doesn't have any class. However, when the image is finally loaded, the ion-img tag get the class "img-loaded".
我终于用 CSS 解决了这个问题!当图像在 ionic 2 中加载时, ion-img 标签没有任何类。但是,当最终加载图像时, ion-img 标签获得类“img-loaded”。
Here is my solution :
这是我的解决方案:
<ion-img [src]="img.src"></ion-img>
<ion-spinner></ion-spinner>
And my CSS :
还有我的 CSS :
.img-loaded + ion-spinner {
display:none;
}
I hope it can help someone!
我希望它可以帮助某人!
采纳答案by AdminDev826
Please use ionic-image-loader plugin
请使用 ionic-image-loader 插件
Install the NPM Package
npm install --save ionic-image-loader
Install Required Plugins
npm i --save @ionic-native/file ionic plugin add cordova-plugin-file --save npm i --save @ionic-native/transfer ionic plugin add cordova-plugin-file-transfer --save
Import IonicImageLoader module
Add IonicImageLoader.forRoot() in your app's root module
import { IonicImageLoader } from 'ionic-image-loader'; // import the module @NgModule({ ... imports: [ IonicImageLoader.forRoot() ] }) export class AppModule {}
Then add IonicImageLoader in your child/shared module(s)
import { IonicImageLoader } from 'ionic-image-loader'; @NgModule({ ... imports: [ IonicImageLoader ] }) export class SharedModule {}
安装 NPM 包
npm install --save ionic-image-loader
安装所需的插件
npm i --save @ionic-native/file ionic plugin add cordova-plugin-file --save npm i --save @ionic-native/transfer ionic plugin add cordova-plugin-file-transfer --save
导入 IonicImageLoader 模块
在应用的根模块中添加 IonicImageLoader.forRoot()
import { IonicImageLoader } from 'ionic-image-loader'; // import the module @NgModule({ ... imports: [ IonicImageLoader.forRoot() ] }) export class AppModule {}
然后在您的子/共享模块中添加 IonicImageLoader
import { IonicImageLoader } from 'ionic-image-loader'; @NgModule({ ... imports: [ IonicImageLoader ] }) export class SharedModule {}
回答by Guillaume Le Mière
I finally solved that problem with CSS! When an image is loading in ionic 2, the ion-img tag doesn't have any class. However, when the image is finally loaded, the ion-img tag get the class "img-loaded".
我终于用 CSS 解决了这个问题!当图像在 ionic 2 中加载时, ion-img 标签没有任何类。但是,当最终加载图像时, ion-img 标签获得类“img-loaded”。
Here is my solution :
这是我的解决方案:
<ion-img [src]="img.src"></ion-img>
<ion-spinner></ion-spinner>
And my CSS :
还有我的 CSS :
.img-loaded + ion-spinner {
display:none;
}
I hope it can help someone!
我希望它可以帮助某人!
回答by M Fuat NURO?LU
If you want to use the img
tag instead of ion-img
here is the solution:
如果你想使用img
标签而不是ion-img
这里的解决方案:
<img src="{{image.src}}" (load)="loaded = true" [ngClass]="{'img-loaded':loaded}" [hidden]="!loaded" *ngIf="image_exists" />
<ion-spinner [ngClass]="{'center':true}" *ngIf="!loaded"></ion-spinner>
In your CSS file you should write the following:
在您的 CSS 文件中,您应该编写以下内容:
.img-loaded + ion-spinner {
display:none;
}
// .center in my case to make the spinner at the center
.center{
margin-left: auto;
margin-right: auto;
display: block;
}
loaded
is a boolean variable with false default value you have to define in your component.
loaded
是一个布尔变量,默认值为 false,您必须在组件中定义。
回答by Yossi Neiman
Your solution is not the best one because the app still downloads all the images, For example in a Facebook like app, You will be downloading all the images from the Feed to your app, This will make everything super slow.
您的解决方案不是最好的,因为该应用程序仍会下载所有图像,例如在 Facebook 之类的应用程序中,您将从 Feed 中下载所有图像到您的应用程序,这将使一切变得非常缓慢。
Use this: https://github.com/NathanWalker/ng2-image-lazy-load