Ng-lazyload-image: μ΄λ―Έμ§€λ‘œλ“œλ₯Ό μˆ˜λ™μœΌλ‘œ νŠΈλ¦¬κ±°ν•˜λ €λ©΄ μ–΄λ–»κ²Œν•΄μ•Όν•©λ‹ˆκΉŒ?

에 λ§Œλ“  2017λ…„ 08μ›” 25일  Β·  11μ½”λ©˜νŠΈ  Β·  좜처: tjoskar/ng-lazyload-image

필터링 κ°€λŠ₯ν•œ μ»¬λ ‰μ…˜μ—μ„œ ng-lazyload-imageλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 슀크둀 ν•  λ•Œ 잘 μž‘λ™ν•˜μ§€λ§Œ λͺ©λ‘μ„ ν•„ν„°λ§ν•˜λ©΄ μΆ•μ†ŒνŒμ΄ λ‚˜νƒ€λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 슀크둀 μ΄λ²€νŠΈκ°€ λ°œμƒν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ°œμƒν•©λ‹ˆλ‹€. 쑰금 μŠ€ν¬λ‘€ν•˜λ©΄ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

데λͺ¨

loading

ν•΄κ²° 방법

ν•΄ν‚€ ν•΄κ²° 방법을 μ°Ύμ•˜μ§€λ§Œ λ§Œμ‘±μŠ€λŸ½μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

// -1, +1 is there to fire the scroll event. Otherwise chrome/ff wont fire it.
window.scrollTo(window.scrollX, window.scrollY - 1);
window.scrollTo(window.scrollX, window.scrollY + 1);
question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš” @philipgiuliani ,

λ¬Έμ œλŠ” ng-lazyload-image λŠ” μ‚¬μš©μžκ°€ 슀크둀 ν•  λ•Œ 이미지가 λ·°ν¬νŠΈμ— μžˆλŠ”μ§€ 만 ν™•μΈν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 슀크둀 μ΄λ²€νŠΈκ°€μ—†λŠ” ν•œ ng-lazyload-image λŠ” μ•„λ¬΄κ²ƒλ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ μ‚¬μš© 사둀λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ μ£Όλ³€ 세상이 λ³€κ²½λ˜μ—ˆμŒμ„ ng-lazyload-image μ•Œλ €μ•Όν•©λ‹ˆλ‹€. 이λ₯Ό μˆ˜ν–‰ν•˜λŠ” 두 가지 방법이 μžˆμŠ΅λ‹ˆλ‹€.

  1. 슀크둀 이벀트λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€. 이것은 이미지가 λ·°ν¬νŠΈμ— μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό μž¬ν™•μΈν•˜κΈ° μœ„ν•΄ ng-lazyload-image λ₯Ό 속일 κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 그의 해결책은 μ˜ˆμ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  2. 슀크둀 이벀트둜 μžμ‹  만의 μŠ€νŠΈλ¦Όμ„ λ§Œλ“€κ³  맞좀 μ΄λ²€νŠΈμ™€ 병합 :
// In your component

constructor() {
  this.updateSearchResult$ = new Subject();
  this.scrollAndSearch$ = Observable.merge(
    Observable.fromEvent(window, 'scroll')
    this.updateSearchResult$
  );
}

onSerachResultResponse() {
  this.updateSearchResult$.next()
}
// in your template
<img [lazyLoad]="lazyLoadImage" [customObservable]="scrollAndSearch$" />

이것이 κ·€ν•˜μ˜ μ§ˆλ¬Έμ— λŒ€ν•œ λ‹΅λ³€μž…λ‹ˆκΉŒ?

λͺ¨λ“  11 λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš” @philipgiuliani ,

λ¬Έμ œλŠ” ng-lazyload-image λŠ” μ‚¬μš©μžκ°€ 슀크둀 ν•  λ•Œ 이미지가 λ·°ν¬νŠΈμ— μžˆλŠ”μ§€ 만 ν™•μΈν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 슀크둀 μ΄λ²€νŠΈκ°€μ—†λŠ” ν•œ ng-lazyload-image λŠ” μ•„λ¬΄κ²ƒλ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ μ‚¬μš© 사둀λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ μ£Όλ³€ 세상이 λ³€κ²½λ˜μ—ˆμŒμ„ ng-lazyload-image μ•Œλ €μ•Όν•©λ‹ˆλ‹€. 이λ₯Ό μˆ˜ν–‰ν•˜λŠ” 두 가지 방법이 μžˆμŠ΅λ‹ˆλ‹€.

  1. 슀크둀 이벀트λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€. 이것은 이미지가 λ·°ν¬νŠΈμ— μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό μž¬ν™•μΈν•˜κΈ° μœ„ν•΄ ng-lazyload-image λ₯Ό 속일 κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 그의 해결책은 μ˜ˆμ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  2. 슀크둀 이벀트둜 μžμ‹  만의 μŠ€νŠΈλ¦Όμ„ λ§Œλ“€κ³  맞좀 μ΄λ²€νŠΈμ™€ 병합 :
// In your component

constructor() {
  this.updateSearchResult$ = new Subject();
  this.scrollAndSearch$ = Observable.merge(
    Observable.fromEvent(window, 'scroll')
    this.updateSearchResult$
  );
}

onSerachResultResponse() {
  this.updateSearchResult$.next()
}
// in your template
<img [lazyLoad]="lazyLoadImage" [customObservable]="scrollAndSearch$" />

이것이 κ·€ν•˜μ˜ μ§ˆλ¬Έμ— λŒ€ν•œ λ‹΅λ³€μž…λ‹ˆκΉŒ?

λΉ„μŠ·ν•œ λ¬Έμ œμ— λŒ€ν•œ 해결책을 μ°Ύκ³  μžˆμ—ˆκ³  κ³΅μœ ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.이 λ¬Έμ œκ°€ μ‚¬λžŒλ“€μ΄ μ•„λ§ˆ 찾을 μˆ˜μžˆλŠ” 곳이라고 μƒκ°ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

문제점 : μ˜€ν”„μ…‹ λ‚΄μ—μ„œ 보이지 μ•Šλ”λΌλ„ 지연 ν›„ μ΄λ―Έμ§€λ‘œλ“œ
μ†”λ£¨μ…˜ : κ³ μ • μ˜€ν”„μ…‹ λŒ€μ‹  μ˜€ν”„μ…‹ 값에 λŒ€ν•œ Observable을 μƒμ„±ν•˜κ³  μ›ν•˜λŠ” μ‹œκ°„ 후에 정말 높은 μ˜€ν”„μ…‹μ„ μ„€μ •ν•©λ‹ˆλ‹€.

// in the Angular 2+ component
constructor () {
  this.imageLoadOffset$ = Observable.merge(
    Observable.of(300),                 // initial offset
    Observable.of(100000).delay(5000)   // offset triggering loading after 5 seconds
  );
}
// in the template
<img [lazyLoad]="'foo.png'" [offset]="imageLoadOffset$ | async" />

κΈ°μ—¬ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. Readme νŒŒμΌμ—μ΄ λ¬Έμ œμ— λŒ€ν•œ 링크λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆλ₯Ό λΉ λ₯΄κ²Œ μŠ€ν¬λ‘€ν•˜λ©΄ 슀크둀 된 μ΄λ―Έμ§€κ°€λ‘œλ“œλ˜μ§€ μ•Šκ³  슀크둀 ν›„ ν˜„μž¬ λ·°ν¬νŠΈμ— μ΄λ―Έμ§€κ°€λ‘œλ“œλ©λ‹ˆλ‹€. μ–΄λ–»κ²Œν•΄μ•Όν•©λ‹ˆκΉŒ? ?

@pangshangggg , μ£„μ†‘ν•˜μ§€λ§Œ 이해가 μ•ˆ λΌμš”. Google λ²ˆμ—­μ„ μ‚¬μš©ν•˜λ €κ³ ν–ˆμ§€λ§Œ μ§ˆλ¬Έμ„ μ΄ν•΄ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€ : / μ˜μ–΄λ‘œ μ“Έ 수 μžˆμŠ΅λ‹ˆκΉŒ?

Ionic 2/3μ—μ„œλŠ” μ‚¬μš©μžκ°€ μŠ€ν¬λ‘€μ„ μ‹œμž‘ν•  λ•ŒκΉŒμ§€ μ΄λ―Έμ§€κ°€λ‘œλ“œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 두 가지 λ°©λ²•μœΌλ‘œμ΄ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
κ°€μž₯ μΆ”μ•…ν•œ 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

@ViewChild(Content) container: Content;
ionViewDidEnter() {
      this.container.scrollTo(this.container.scrollLeft, this.container.scrollTop + 1);
      this.container.scrollTo(this.container.scrollLeft, this.container.scrollTop - 1);
   }

그리고 이것이 쒋은 λ°©λ²•μž…λ‹ˆλ‹€.

@ViewChild(Content) container: Content;
contentLoaded: Subject<any> = new Subject();
loadAndScroll: Observable<any>;

ionViewDidEnter() {
      this.contentLoaded.next();
}
ionViewDidLoad() {
      this.loadAndScroll = Observable.merge(
         this.container.ionScroll,
         this.contentLoaded
      );
}

(in the template : [customObservable]="loadAndScroll" )

μœ„μ— κ²Œμ‹œ 된 μ†”λ£¨μ…˜μ„ ionic으둜 λ°” κΎΈμ—ˆμŠ΅λ‹ˆλ‹€. 더 이상 :)

Angular 6 및 rxjs 6μ—μ„œ 이전 예제λ₯Ό 따라 슀크둀 μ΄λ²€νŠΈμ— μ˜ν•œ μ§€μ—°λ‘œλ“œλ₯Ό μˆ˜λ™μœΌλ‘œ νŠΈλ¦¬κ±°ν•˜λ €κ³ ν–ˆμ§€λ§Œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. νŽ˜μ΄μ§€λ₯Ό μŠ€ν¬λ‘€ν•˜μ§€ μ•Šκ³  λͺ¨λ“  이미지가 μ°¨λ‘€λ‘œλ‘œλ“œλ©λ‹ˆλ‹€. 이것은 λ‚΄ μ½”λ“œμž…λ‹ˆλ‹€.

μ£Όν˜•:

<div *ngFor="let image of images">
    <img [defaultImage]="defaultImage"
    [lazyLoad]="image"
    [useSrcset]="true"
    [offset]="offset" [scrollObservable]="scrollObservable" >
</div>

ꡬ성 μš”μ†Œ:
scrollObservable = fromEvent(window, 'scroll');

el-Davoκ°€ Angular 5의 문제λ₯Ό ν•΄κ²°ν•œλ‹€κ³  λ§ν•œ 224 ν˜Έμ—μ„œμ΄ 예제λ₯Ό λ”°λžμŠ΅λ‹ˆλ‹€.

Ionic 2/3μ—μ„œλŠ” μ‚¬μš©μžκ°€ μŠ€ν¬λ‘€μ„ μ‹œμž‘ν•  λ•ŒκΉŒμ§€ μ΄λ―Έμ§€κ°€λ‘œλ“œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 두 가지 λ°©λ²•μœΌλ‘œμ΄ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
κ°€μž₯ μΆ”μ•…ν•œ 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

@ViewChild(Content) container: Content;
ionViewDidEnter() {
      this.container.scrollTo(this.container.scrollLeft, this.container.scrollTop + 1);
      this.container.scrollTo(this.container.scrollLeft, this.container.scrollTop - 1);
   }

그리고 이것이 쒋은 λ°©λ²•μž…λ‹ˆλ‹€.

@ViewChild(Content) container: Content;
contentLoaded: Subject<any> = new Subject();
loadAndScroll: Observable<any>;

ionViewDidEnter() {
      this.contentLoaded.next();
}
ionViewDidLoad() {
      this.loadAndScroll = Observable.merge(
         this.container.ionScroll,
         this.contentLoaded
      );
}

(in the template : [scrollObservable]="loadAndScroll" )

μœ„μ— κ²Œμ‹œ 된 μ†”λ£¨μ…˜μ„ ionic으둜 λ°” κΎΈμ—ˆμŠ΅λ‹ˆλ‹€. 더 이상 :)

μ£„μ†‘ν•˜μ§€λ§Œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.
this.contentLoaded.next ();
μž‘λ™ μ•ˆν•¨
슀크둀 ν•  λ•Œλ§Œ 잘 μž‘λ™ν•©λ‹ˆλ‹€.
???

μ•ˆλ…•ν•˜μ„Έμš” @zarinara ,
not working 라고 λ§ν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆκΉŒ?

μ•ˆλ…•ν•˜μ„Έμš”
였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŒ

@zarinara λ‹˜ , μƒˆ 이슈λ₯Ό μƒμ„±ν•˜κ³  λͺ‡ 가지 μ½”λ“œ μ˜ˆμ œμ™€ ng-lazyload-image ( npm ls ng-lazyload-image )의 버전 번호λ₯Ό 포함 ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? intersectionObserver μžˆμŠ΅λ‹ˆκΉŒ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰