加载图像时显示加载图标

时间:2016-07-22 22:46:33

标签: javascript angular ionic2

我想在div内部显示一个背景图片/加载微调器,它将在其中加载图像,图像将在完全加载后显示,执行如下操作:

   <div style="background-image:url('imageThatWillAppearBeforeLoad')"></div>

Demo (In jQuery)

如何使用Angular2 / Ionic2进行相同的操作?

3 个答案:

答案 0 :(得分:14)

创建一个显示占位符图像的组件,直到加载所请求的图像,并隐藏所请求的图像。加载图像后,隐藏占位符并显示图像。

@Component({
  selector: 'image-loader',
  template: `<img *ngIf="!loaded" src="url-to-your-placeholder"/>
    <img [hidden]="!loaded" (load)="loaded = true" [src]="src"/>`
})
export class ImageLoader {
  @Input() src;
}

Plunker中查看它。

<强>更新

现在我更了解这些要求,这是一个带背景图片的解决方案。这有点笨拙,我更喜欢原来的......

@Directive({
  selector: '[imageLoader]'
})
export class ImageLoader {
  @Input() imageLoader;

  constructor(private el:ElementRef) {
    this.el = el.nativeElement;
    this.el.style.backgroundImage = "url(http://smallenvelop.com/demo/image-loading/spinner.gif)";
  }

  ngOnInit() {
    let image = new Image();
    image.addEventListener('load', () => {
      this.el.style.backgroundImage = `url(${this.imageLoader})`;
    });
    image.src = this.imageLoader;
  }
}

Updated plunker

答案 1 :(得分:3)

以下是我posts

之一的副本

我终于用CSS解决了这个问题!当图像以离子2加载时,ion-img标签不具有任何类别。但是,当最终加载图像时,ion-img标签会得到类&#34; img-loaded&#34;。

这是我的解决方案:

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

我的CSS:

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

答案 2 :(得分:0)

只需使用此功能

loadImage(element: HTMLElement, imagePath: string, spinnerPath: string) {
  element.tagName === 'img'
    ? element.setAttribute('src', spinnerPath)
    : (element.style.background = `url(${spinnerPath}) 50% 50% no-repeat`);
  const image = new Image();
  image.crossOrigin = 'Anonymous';
  image.src = imagePath;
  image.onload = () => {
    element.tagName === 'img'
      ? element.setAttribute('src', imagePath)
      : (element.style.background = `url(${imagePath})`);
  };
}

您不必担心图像元素或div或其他元素是什么?

如果您不知道如何使用它的示例

ngOnInit() {
  const myElement = document.getElementsByClassName('my-element')[0];
  // or however you want to select it.
  const imagePath = 'path/to/image.png';
  const spinnerPath = 'path/to/spinner.gif'; // or base64 spinner url.

  this.loadImage(myElement, imagePath, spinnerPath);
}

快乐编码