离子2 /离子3 /离子4 :(懒)加载微调器的图片

时间:2016-08-09 08:58:14

标签: mobile angular typescript sass ionic2

我在ionic2应用程序中使用ion-img来正确加载我的图片。但是,我想知道是否有办法向用户表明图片实际正在加载。

感谢您的帮助!

编辑:如果你绝对需要使用ion-img标签,这就是答案。如果没有,则应将ionic-image-loader用作AdminDev826建议。

我终于用CSS解决了这个问题!当图像以离子2加载时,ion-img标签没有任何类别。但是,当最终加载图像时,ion-img标签会获得“img-loaded”类。

这是我的解决方案:

  <ion-img [src]="img.src"></ion-img>
  <ion-spinner></ion-spinner>

我的CSS:

.img-loaded + ion-spinner {
  display:none;
}

我希望它可以帮助别人!

5 个答案:

答案 0 :(得分:13)

我终于用CSS解决了这个问题!当图像以离子2加载时,ion-img标签没有任何类别。但是,当最终加载图像时,ion-img标签会获得“img-loaded”类。

这是我的解决方案:

  <ion-img [src]="img.src"></ion-img>
  <ion-spinner></ion-spinner>

我的CSS:

.img-loaded + ion-spinner {
  display:none;
}

我希望它可以帮助别人!

答案 1 :(得分:9)

请使用ionic-image-loader插件

  1. 安装NPM包

    npm install --save ionic-image-loader
    
  2. 安装必需的插件

    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
    
  3. 导入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 {}
    

答案 2 :(得分:8)

如果您想使用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>

在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是一个布尔变量,您必须在组件中定义假默认值。

答案 3 :(得分:3)

您的解决方案并不是最好的解决方案,因为该应用程序仍会下载所有图像,例如在类似Facebook的应用程序中,您将从Feed下载所有图像到您的应用程序,这将使一切都超级慢。

使用此: https://github.com/NathanWalker/ng2-image-lazy-load

答案 4 :(得分:1)

ionic-image-loader在ionic4 +中不起作用。您必须创建一个组件:

HTML

<ion-spinner name="dots" [hidden]="viewImage" color="primary"></ion-spinner>
<ion-img #image alt=""(ionImgDidLoad)="loadImage()" (ionError)="errorLoad()"></ion-img>

打字稿

    @Component({
      selector: 'preloader-img',
      templateUrl: './preloader-img.component.html',
      styles: [`
        ion-spinner {
          display: block;
          margin: auto;
        }
      `],
    })
    export class PreloaderImgComponent implements AfterViewInit {
      viewImage = false;

      @Input() url: string;
      @ViewChild('image', { static: false }) imageRef: IonImg;


      ngAfterViewInit() {
        this.imageRef.src = this.url;
      }
      loadImage() {
        this.viewImage = true;
      }
      errorLoad() {
        this.imageRef.src = '<your_default_img>';
      }
    }